Existen varias formas de evitar el hecho de que en REBOL/2 simplemente no es posible ampliar el contexto de los objetos.
Probablemente sólo puede utilizar BLOQUE s en lugar de OBJETO s:!!
>> 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
Puede incluso hacer 'yo trabajo con sólo añadiendo el objeto en sí mismo:
>> insert blobject reduce ['self blobject]
== [[...] foo 1 bar 2]
>> same? blobject blobject/self
== true
Pero a medida que' Si solicitó extender OBJECT! s, puede optar por la solución de Peter WA Wood para simplemente clonar el objeto. Solo tenga en cuenta que con este enfoque, el clon resultante realmente es una cosa diferente que el objeto original.
lo tanto, si alguna palabra se ha configurado para contener el objeto antes de la clonación/extender, después de clonar el objeto de que la palabra todavía llevará a cabo el objeto no extendido:
>> remember: object: make object! [foo: 1]
>> object: make object [bar: 2]
>> same? remember object
== false
>> probe remember
make object! [
foo: 1
]
En caso de que sea esencial para que usted mantenga "referencias" al objeto intactas, es posible que desee para envolver el objeto que necesita para extenderse en un objeto exterior como en
>> remember: object: make object! [access: make object! [foo: 1]]
>> object/access: make object/access [bar: 2]
>> same? remember object
== true
a continuación, puede extenderse Safley el objeto mientras se mantiene, es dada sólo almacenan referencias al contenedor .
REBOL/3, por cierto, permitirá agregar palabras a OBJECT! S.
Este es uno de los aspectos fundamentales de REBOL, pero en el momento en que hice esta pregunta, no sabía que podría hacer esto. –