Существует несколько способов обойти тот факт, что в REBOL/2 просто невозможно расширить объектные контексты.
Вероятно, вы можете просто использовать BLOCK s вместо ОБЪЕКТ 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
Вы можете даже сделать 'я рабочий, просто добавив сам объект:
>> insert blobject reduce ['self blobject]
== [[...] foo 1 bar 2]
>> same? blobject blobject/self
== true
Но как вы' ve попросил продлить 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
вы можете Safley расширить объект, сохраняя при этом, дали вам хранить только ссылки на контейнер ,
REBOL/3, btw, позволит добавлять слова в объект OBJECT! S.
Это один из основополагающих аспектов REBOL, но в то время, когда я задавал этот вопрос, я не знал, что вы можете это сделать. – 2009-02-12 05:36:56