Es gibt mehrere Möglichkeiten, um das Problem zu umgehen, dass es in REBOL/2 einfach nicht möglich ist, Objektkontexte zu erweitern.
Vielleicht können Sie einfach BLOCK!s anstelle von OBJECT!s verwenden:
>> blobject: [foo 1]
== [foo 1]
>> blobject/bar
** Skriptfehler: Ungültiger Pfadwert: bar
** In der Nähe von: blobject/bar
>> append blobject [bar 2]
== [foo 1 bar 2]
>> blobject/bar: 3
== 3
Sie können auch 'self' einfach funktionieren lassen, indem Sie das Objekt selbst anhängen:
>> insert blobject reduce ['self blobject]
== [[...] foo 1 bar 2]
>> same? blobject blobject/self
== true
Aber da Sie nach der Erweiterung von OBJECT!s gefragt haben, können Sie Peter W A Woods Lösung nutzen und einfach das Objekt klonen. Bedenken Sie jedoch, dass bei diesem Ansatz der resultierende Klon wirklich etwas anderes als das Originalobjekt ist.
Also, wenn ein Wort gesetzt wurde, um das Objekt vor dem Klonen/Erweitern zu halten, dann wird dieses Wort nach dem Klonen des Objekts immer noch das unerweiterte Objekt halten:
>> remember: object: make object! [foo: 1]
>> object: make object [bar: 2]
>> same? remember object
== false
>> probe remember
make object! [
foo: 1
]
Falls es für Sie wichtig ist, "Referenzen" zum Objekt intakt zu halten, könnten Sie das Objekt, das Sie erweitern müssen, in einem äußeren Objekt einbetten, wie folgt:
>> remember: object: make object! [access: make object! [foo: 1]]
>> object/access: make object/access [bar: 2]
>> same? remember object
== true
Sie können dann das Objekt sicher erweitern, vorausgesetzt, Sie speichern nur Referenzen zum Container.
Übrigens, REBOL/3 wird das Hinzufügen von Wörtern zu OBJECT!s ermöglichen.