Sono sinonimi di oggetto e contesto in rebol2?
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?
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?)