3

在 Rebol2 中,如果全局上下文是system/words,为什么我会得到这个结果?

>> X: 0
== 0
>> same? system/words bound? 'X 
== false

在这种情况下,上下文是什么?same?还是在全局上下文中使用有问题?(我尝试重复第二个命令以防它改变上下文)

4

1 回答 1

3

我认为这是一种翻译怪癖。您不会在 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
于 2013-09-12T06:27:39.210 回答