Pergunta

Minha primeira suposição é que objeto e contexto são sinônimos.Então eu criei um objeto o e um contexto c.Sondá-los relata a mesma construção de código e também o tipo é o mesmo (ambos sendo do tipo objeto!):

>> 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!

... mas ao testar a igualdade você obtém:

>> equal? o c
== false

Portanto, parece claro que não são sinônimos.Por que não, se eles tentam ser exatamente iguais?

Foi útil?

Solução

Você fez uma comparação de contexto para objeto, mas não fez uma comparação de objeto para objeto!Eles testariam iguais no Rebol2?Vamos tentar...

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

Não! equal? não funciona no Rebol 2 em objetos.Por razões internas misteriosas para as quais não temos código.:-/ No Rebol3 (que é Código aberto) eles testam iguais, no entanto:

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

Os contextos também serão testados como iguais ao seu objeto correspondente:

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

Eu descobri pela primeira vez a distinção entre objeto e contexto no Rebol3 quando percebi que o objeto era um mezanino que modificava seu bloco de entrada.Isso me intrigou.

>> 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
]]

A consequência óbvia é que você pode criar um objeto que não tenha valor terminal, como object [a: b: c:] enquanto que com um contexto você teria que escrever context [a: b: c: none] para evitar que seja um erro.

(Observação:Na verdade, não sei por que ser um caso de erro para o contexto é tão importante ou, alternativamente, por que não ser um caso de erro para o objeto é tão importante.Parece -me que "faça objeto!" poderia simplesmente escolher uma expectativa interna e cumprir-então se livra da palavra de contexto e todos estão um pouco menos confusos.Talvez alguém tenha um comentário para esclarecer isso?)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top