您进行了上下文到对象的比较,但没有进行对象到对象的比较!他们会在 Rebol2 中测试相等吗?我们试试看...
>> equal? (make object! [a: 1]) (make object! [a: 1])
== false
没有! equal?
在 Rebol 2 中对对象不起作用。由于神秘的内部原因,我们没有代码。:-/ 在 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:]
,在使用上下文时,您必须编写context [a: b: c: none]
以防止它成为错误。
(注意:我实际上不确定为什么将其作为上下文的错误情况如此重要,或者为什么不将其作为对象的错误情况如此重要。在我看来,“制造对象!”可能只是选择一个内部期望并坚持下去——然后去掉 CONTEXT 这个词,每个人都少了一点困惑。也许有人会发表评论澄清这一点?)