REBOL2에서 객체에 코드를 동적으로 추가하지 않는 이유는 무엇입니까?
문제
이 질문은 REBOL 2의 컨텍스트 또는 개체에 동적으로 코드를 추가하는 것입니다. Rebol의 컨텍스트에 단어를 동적으로 추가하지만 동일한 종류가 아닙니다.
코드 블록을 사용하여 REBOL 객체에 코드를 동적으로 추가하고 싶다면 이상한 행동으로 인해 문제가 발생했습니다.
>> append third o [c: 3]
== [a: 1 b: 2 c: 3]
.
...
>> first o
== [self a b]
>> second o
== [make object! [
a: 1
b: 2
] 1 2]
>> third o
== [a: 1 b: 2]
.
추가가 누락되었습니다!first o
또는 second o
>> m: [a [b] c]
== [a [b] c]
>> append m 3
== [a [b] c 3]
>> m
== [a [b] c 3]
>> append second m 1
== [b 1]
>> m
== [a [b 1] c 3]
.
해결책
third
함수는 원래 오브젝트 스펙을 리턴하지 않으므로 객체의 단어와 값에서 생성되는 새로 단어 및 값의 새 블록을 반환합니다. 따라서 해당 새 블록 (블록에 영향을 미치지 만 오브젝트가 아님)에 추가됩니다.
오브젝트 스펙으로 전달 된 원래 블록에 대한 시리즈 참조를 얻을 수 없습니다. 그것은 물체가 건설 된 후에 멀리 떨어져 있으며 어쨌든 객체에 더 이상 영향을 미치지 않습니다. 그래서 은 make object
에 전달 된 블록에 대한 참조를 저장 했으므로 객체에 아무 것도하지 않으려 고합니다.
REBOL 2. 오브젝트에 객체에 추가 할 수는 없지만 REBOL 3에서는 객체에 추가 할 수 있습니다.
>> append make object! [a: 1 b: 2] [c: 3]
== make object! [
a: 1
b: 2
c: 3
]
.
(주 : REBOL에서 서수 반사기를 사용하지 마십시오. 5 년 전에 나왔고 rebol 3에서 제거되었습니다.)
제휴하지 않습니다 StackOverflow