rebol2のオブジェクトおよびコンテキストの同義語はありますか?
質問
私の最初の仮定は、オブジェクトとコンテキストが同義語であるということです。そのため、オブジェクト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!
.
...しかしあなたが得る平等をテストするとき:
>> equal? o c
== false
.
だからそれらは同義語ではないようです。彼らが正確に同じになるようにプローブしないのはなぜですか?
解決
オブジェクト間の比較をしましたが、オブジェクト間の比較をしませんでした!彼らは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]
を書き込んでください。
(注:それは実際にはそれがコンテキストのためのエラーケースであることが非常に重要である理由はわからない、あるいはそれがオブジェクトのエラーケースではない理由は非常に重要です。私にはそうです」オブジェクトを作ることができました!」内部の期待を1つ選んでそれに固執することができます - それからコンテキストの言葉を取り除くと、誰もが少し混乱しています。おそらく誰かがそれを明確にするためのコメントがあるでしょうか?)