문제

나의 첫 번째 가정은 객체와 컨텍스트가 동의어라는 것입니다.그래서 객체를 만들었습니다. 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] 오류가 발생하지 않도록 합니다.

(메모:실제로 컨텍스트에 대한 오류 사례가 되는 것이 왜 그렇게 중요한지 또는 개체에 대한 오류 사례가 되지 않는 것이 왜 그렇게 중요한지 잘 모르겠습니다."대상을 만드십시오!" 하나의 내부 기대를 고르고 그것을 고수 할 수 있습니다. 그런 다음 상황 단어를 제거하고 모든 사람은 약간 혼란스러워합니다.아마도 누군가가 이를 명확히 하기 위해 의견을 제시할 것입니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top