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?

¿Fue útil?

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?)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top