在 Rebol2 中,如果全局上下文是system/words
,为什么我会得到这个结果?
>> X: 0
== 0
>> same? system/words bound? 'X
== false
在这种情况下,上下文是什么?same?
还是在全局上下文中使用有问题?(我尝试重复第二个命令以防它改变上下文)
我认为这是一种翻译怪癖。您不会在 Rebol 3 中遇到它。事实是,bound?
Rebol 2 中的结果(结果)与“普通对象/上下文”的某些“类型位”不同。这种差异导致 的意外结果same?
。您会获得预期的结果,例如如下:
same? bound? 'X bound? 'system
顺便说一句,这可能是添加到测试套件中的一个很好的测试,如果还没有的话。(在 Rebol3 中没有全局上下文,因此您可能需要使用一个对象来使测试同时适用于 Rebol2 和 Rebol3)。测试可能如下所示:
o: make object! [a: none]
same? o bound? in o 'a
如上所述,此测试在 Rebol 2 中失败,而在 Rebol 3 中通过。
与上述测试相反,此测试在 Rebol 2 和 Rebol 3 中均成功:
o: make object! [a: none]
same? bound? first bind [a] o bound? first bind [self] o