Domanda

La mia prima ipotesi è che oggetto e contesto sono sinonimi.Quindi ho creato un oggetto o e un contesto c.Cermandoli riportano lo stesso costrutto in codice e anche il tipo è lo stesso (sia il tipo di oggetto!) :

>> o: make object! [a: 1 b: 2]

>> c: context [a: 1 b: 2]

>> probe o
make object! [
    a: 1
    b: 2
]

>> probe c
make object! [
    a: 1
    b: 2
]

>> type? o
== object!

>> type? c
== object!
.

... Ma quando si verifica l'uguaglianza che ottieni:

>> equal? o c
== false
.

Quindi sembra chiaro che non sono sinonimi.Perché non se provengono esattamente lo stesso?

È stato utile?

Soluzione

Hai fatto un confronto contesto-oggetto, ma non hai fatto un confronto da oggetti-oggetto! Testerebbero uguali a Rebol2? Proviamo ...

>> equal? (make object! [a: 1]) (make object! [a: 1])
== false
.

No! equal? non funziona in Rebol 2 sugli oggetti. Per ragioni interne misteriose non abbiamo alcun codice per. : - / in rebol3 (che è open source ) fanno test uguale, tuttavia:

>> equal? (make object! [a: 1]) (make object! [a: 1])
== true
.

I contesti proveranno anche come uguale al loro oggetto corrispondente:

>> equal? (context [a: 1]) (object [a: 1])      
== true
.

Ho scoperto per la prima volta la distinzione tra oggetto e contesto in Rebol3 quando ho notato l'oggetto era un mezzanino che ha modificato il suo blocco di input. Questo mi ha scontato.

>> source object
object: make function! [[
    "Defines a unique object."
    blk [block!] "Object words and values (modified)"
][
    make object! append blk none
]]

>> source context
context: make function! [[
    "Defines a unique object."
    blk [block!] "Object words and values (modified)"
][
    make object! blk
]]
.

L'ovvia conseguenza è che è possibile creare un oggetto che non ha valore terminale, come object [a: b: c:], mentre con un contesto dovrai scrivere context [a: b: c: none] per tenerlo ad essere un errore.

(Nota: in realtà non sono sicuro del perché avere un caso di errore per il contesto sia così importante, o alternativamente perché non essere un caso di errore per l'oggetto è così importante. Mi sembra che " Effettua l'oggetto! "Potrebbe semplicemente scegliere un'aspettativa interna e attenersi ad essa - quindi sbarazzarsi della parola di contesto e tutti sono un po 'meno confusi. Forse qualcuno avrà un commento per chiarirlo?)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top