3

Rebol2 で、グローバル コンテキストが の場合system/words、なぜこの結果が得られるのですか?

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

この場合の文脈は何ですか?same?それとも、グローバル コンテキストでの使用に問題がありますか? (コンテキストが変更された場合に備えて、2番目のコマンドを繰り返してみました)

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 に答える