Object Rebol2中是否存在对象和上下文同义词?

Object Rebol2中是否存在对象和上下文同义词?,object,equality,rebol,rebol2,Object,Equality,Rebol,Rebol2,我的第一个假设是对象和上下文是同义词。所以我创建了一个对象o和一个上下文c。探测它们会报告相同的代码构造,并且类型也相同(都是类型对象!): …但在测试平等性时,您会得到: >> equal? o c == false 所以很明显,它们不是同义词。如果它们探测到完全相同,为什么不呢?您进行了上下文到对象的比较,但没有进行对象到对象的比较!他们在Rebol2测试中是否相等?让我们试试 >> equal? (make object! [a: 1]) (make object

我的第一个假设是对象和上下文是同义词。所以我创建了一个对象
o
和一个上下文
c
。探测它们会报告相同的代码构造,并且类型也相同(都是类型对象!):

…但在测试平等性时,您会得到:

>> equal? o c
== false

所以很明显,它们不是同义词。如果它们探测到完全相同,为什么不呢?

您进行了上下文到对象的比较,但没有进行对象到对象的比较!他们在Rebol2测试中是否相等?让我们试试

>> equal? (make object! [a: 1]) (make object! [a: 1])
== false
不<代码>相等?在Rebol 2中对对象不起作用。由于神秘的内部原因,我们没有针对的代码。:-/但在Rebol3(即Rebol3)中,它们的测试结果相同:

>> equal? (make object! [a: 1]) (make object! [a: 1])
== true
上下文还将测试其对应的对象:

>> equal? (context [a: 1]) (object [a: 1])      
== true
我在Rebol3中首次发现了对象和上下文之间的区别,当时我注意到对象是一个修改其输入块的夹层。这使我困惑

>> 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
]]
明显的结果是,您可以创建一个没有终端值的对象,比如
object[a:b:c://code>,而对于上下文,您必须编写
context[a:b:c:none]
,以防止它成为错误


(注意:我实际上不知道为什么上下文中有一个错误案例如此重要,或者为什么对象中没有一个错误案例如此重要。在我看来,“make object!”你可以选择一个内在的期望并坚持下去——然后去掉上下文,每个人都会少一点困惑。也许有人会发表评论来澄清这一点?

这非常令人困惑。最好只使用上下文方式创建对象,可能会将上下文重命名为对象并删除原始对象。有关上下文与对象的进一步讨论,请参阅。在Rebol2中,上下文和对象是同义词,但相等性测试无法按预期工作。
>> 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
]]