Rebol2에서 OBJECT와 CONTEXT는 동의어입니까?
문제
나의 첫 번째 가정은 객체와 컨텍스트가 동의어라는 것입니다.그래서 객체를 만들었습니다. o
그리고 맥락 c
.조사 결과 동일한 코드 구성이 보고되었으며 유형도 동일합니다. (둘 다 유형 객체입니다!):
>> o: make object! [a: 1 b: 2]
>> c: context [a: 1 b: 2]
>> probe o
make object! [
a: 1
b: 2
]
>> probe c
make object! [
a: 1
b: 2
]
>> type? o
== object!
>> type? c
== object!
...하지만 동등성을 테스트하면 다음과 같은 결과를 얻습니다.
>> equal? o c
== false
따라서 동의어가 아닌 것이 분명해 보입니다.그들이 정확히 동일하다고 조사한다면 어떨까요?
해결책
컨텍스트-객체 비교를 수행했지만 객체-객체 비교는 수행하지 않았습니다!Rebol2에서 동일하게 테스트됩니까?해보자...
>> equal? (make object! [a: 1]) (make object! [a: 1])
== false
아니요! equal?
개체의 Rebol 2에서는 작동하지 않습니다.신비한 내부 이유로 인해 코드가 없습니다.:-/ Rebol3에서(이것은 오픈 소스) 그들은 동일하게 테스트하지만:
>> equal? (make object! [a: 1]) (make object! [a: 1])
== true
또한 컨텍스트는 해당 객체와 동일한지 테스트합니다.
>> equal? (context [a: 1]) (object [a: 1])
== true
Rebol3에서 객체와 컨텍스트의 차이에 대해 처음으로 알게 된 것은 객체가 입력 블록을 수정하는 메자닌이라는 것을 알았을 때였습니다.나는 이것이 나를 당황하게 만들었다.
>> source object
object: make function! [[
"Defines a unique object."
blk [block!] "Object words and values (modified)"
][
make object! append blk none
]]
>> source context
context: make function! [[
"Defines a unique object."
blk [block!] "Object words and values (modified)"
][
make object! blk
]]
분명한 결과는 다음과 같이 최종 가치가 없는 객체를 만들 수 있다는 것입니다. object [a: b: c:]
반면에 상황에 따라 작성해야 합니다. context [a: b: c: none]
오류가 발생하지 않도록 합니다.
(메모:실제로 컨텍스트에 대한 오류 사례가 되는 것이 왜 그렇게 중요한지 또는 개체에 대한 오류 사례가 되지 않는 것이 왜 그렇게 중요한지 잘 모르겠습니다."대상을 만드십시오!" 하나의 내부 기대를 고르고 그것을 고수 할 수 있습니다. 그런 다음 상황 단어를 제거하고 모든 사람은 약간 혼란스러워합니다.아마도 누군가가 이를 명확히 하기 위해 의견을 제시할 것입니다.)