¿Son los sinónimos de objeto y contexto en Rebol2?
Pregunta
Mi primer supuesto es que el objeto y el contexto son sinónimos.Así que creé un objeto o
y un contexto c
.Sondearlos informa el mismo constructo de código, y también el tipo es el mismo (ambos siendo objeto de tipo!) :
>> 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!
... pero al probar la igualdad que obtiene:
>> equal? o c
== false
Entonces parece claro que no son sinónimos.¿Por qué no si son investigadores para ser exactamente iguales?
Solución
Hiciste una comparación de contexto a objetos, ¡pero no hiciste una comparación de objetos a objetos! ¿Prueblarían iguales en Rebol2? Probemos ...
>> equal? (make object! [a: 1]) (make object! [a: 1])
== false
nope! equal?
no funciona en Rebol 2 en objetos. Por razones internas misteriosas, no tenemos código para. : - / en rebol3 (que es Abrir código abierto ) Hacen una prueba igual, sin embargo:
>> equal? (make object! [a: 1]) (make object! [a: 1])
== true
Los contextos también se probarán igual a su objeto correspondiente:
>> equal? (context [a: 1]) (object [a: 1])
== true
Primero se enteró de la distinción entre el objeto y el contexto en Rebol3 cuando noté que el objeto era un entresuelo que modificaba su bloque de entrada. Esto me desconcertó.
>> 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
]]
La consecuencia obvia es que puede hacer un objeto que no tiene valor terminal, como object [a: b: c:]
, mientras que con un contexto, tendría que escribir context [a: b: c: none]
para evitar que sea un error.
(Nota: en realidad no estoy seguro de por qué tener que ser un caso de error para el contexto es tan importante, o alternativamente, por lo que no es tan importante tener un caso de error para el objeto. Me parece que " ¡Haz un objeto! "Podría simplemente elegir una expectativa interna y seguirlo, luego deshacerse de la palabra contextual y todos están un poco menos confundidos. ¡Quizás alguien tenga un comentario para aclarar eso?)