我的第一个假设是,对象和上下文是同义词。所以我创建了一个对象o和一个上下文c。探测它们会报告相同的代码构造,类型也是相同的(都是类型对象!)
>> 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!当测试是否相等时,可以获得以下...but:
>> equal? o c
== false很明显,它们不是同义词。如果他们的调查完全一样,为什么不呢?
发布于 2014-02-26 21:18:30
您做了上下文对对象的比较,但没有进行对象对对象的比较!他们会在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]以避免它成为一个错误。
(注意:我实际上不知道为什么上下文中的错误大小写是如此重要,或者交替地说,为什么它不是对象的错误大小写如此重要。在我看来,“造物!”只要选择一个内在的期望,并坚持它--然后去掉上下文这个词,每个人就不会那么困惑了。也许有人会发表评论来澄清这一点?)
https://stackoverflow.com/questions/22053340
复制相似问题