REBOL/2 ではオブジェクト コンテキストを拡張することができないという事実を回避するには、いくつかの方法があります。
おそらく、OBJECT! の代わりに BLOCK! を使用できます。
>> blobject: [foo 1]
== [foo 1]
>> blobject/bar
** Script Error: Invalid path value: bar
** Near: blobject/bar
>> append blobject [bar 2]
== [foo 1 bar 2]
>> blobject/bar: 3
== 3
オブジェクト自体を追加するだけで、 'self を機能させることもできます。
>> insert blobject reduce ['self blobject]
== [[...] foo 1 bar 2]
>> same? blobject blobject/self
== true
しかし、あなたがOBJECT!sを拡張するように求めたので、単純にオブジェクトを複製する Peter WA Wood のソリューションに行くかもしれません。このアプローチでは、結果のクローンは元のオブジェクトとはまったく異なるものになることに注意してください。
そのため、クローン作成/拡張の前にオブジェクトを保持するようにワードが設定されている場合、オブジェクトのクローン作成後も、そのワードは拡張されていないオブジェクトを保持します。
>> remember: object: make object! [foo: 1]
>> object: make object [bar: 2]
>> same? remember object
== false
>> probe remember
make object! [
foo: 1
]
オブジェクトへの「参照」をそのまま保持することが不可欠な場合は、次のように、拡張する必要があるオブジェクトを外側のオブジェクトでラップすることをお勧めします。
>> remember: object: make object! [access: make object! [foo: 1]]
>> object/access: make object/access [bar: 2]
>> same? remember object
== true
コンテナへの参照のみを保存すると、保持しながらオブジェクトを安全に拡張できます。
REBOL/3 では、OBJECT! に単語を追加できます。