Có một số cách để làm việc xung quanh một thực tế rằng trong REBOL/2 nó chỉ là không posssible để mở rộng bối cảnh đối tượng.
Có lẽ bạn chỉ có thể sử dụng BLOCK s thay vì OBJECT 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
Bạn thậm chí có thể làm cho 'tự làm việc bằng cách chỉ phụ thêm đối tượng chính nó:
>> insert blobject reduce ['self blobject]
== [[...] foo 1 bar 2]
>> same? blobject blobject/self
== true
Nhưng khi bạn' đã yêu cầu mở rộng OBJECT! s, bạn có thể dùng giải pháp Peter WA Wood để đơn giản sao chép đối tượng. Chỉ cần nhớ rằng với cách tiếp cận này, bản sao kết quả thực sự là một thứ khác với đối tượng gốc.
Vì vậy, nếu một số từ đã được thiết lập để giữ các đối tượng trước khi sao chép/mở rộng, sau khi nhân bản đối tượng từ đó vẫn sẽ giữ đối tượng unextended:
>> remember: object: make object! [foo: 1]
>> object: make object [bar: 2]
>> same? remember object
== false
>> probe remember
make object! [
foo: 1
]
Trong trường hợp nó là điều cần thiết để bạn có thể giữ "tài liệu tham khảo" cho các đối tượng còn nguyên vẹn, bạn có thể muốn quấn đối tượng bạn cần phải mở rộng trong một đối tượng bên ngoài như trong
>> remember: object: make object! [access: make object! [foo: 1]]
>> object/access: make object/access [bar: 2]
>> same? remember object
== true
sau đó, bạn có thể safley mở rộng đối tượng trong khi vẫn giữ, vì bạn chỉ cửa hàng tham chiếu đến container .
REBOL/3, btw, sẽ cho phép thêm từ vào OBJECT! S.
Nguồn
2009-01-10 19:41:56
Đây là một trong những khía cạnh cơ bản của REBOL, nhưng tại thời điểm tôi hỏi câu hỏi này, tôi không biết bạn có thể làm điều này. –