2014-02-07 4 views
2

최근에 iolanguage를 배우기 시작했습니다. "방법" 메시지를 시도 할 때, 나는 썼다 :iolanguage getSlot가 예상 객체를 반환하지 않습니다.

Io> f := method(getSlot("f")) 
==> method(
    getSlot("f") 
) 

Io> slotSummary 
==> Object_0x97f41a8: 
    Lobby   = Object_0x97f41a8 
    Protos   = Object_0x97f4090 
    _    = nil 
    exit    = method(...) 
    f    = method(...) 
    forward   = method(...) 
    set_    = method(...) 

Io> f 
==> nil 

그러나 왜 전화 F에 전무 대신 "F" 자체를 반환합니다?

답변

2

guidemethod()에 따르면 지역 주민을 저장하는 객체를 소개하고 메시지의 대상의 로컬 self 포인터를 설정합니다. 따라서 대상 슬롯이 없지만 self을 통해 얻을 수 있습니다.

Io> f := method(self getSlot("f")) 
==> method(
    self getSlot("f") 
) 
Io> f 
==> method(
    self getSlot("f") 
) 
0

g := block(getSlot("g"))을 시도해보십시오. 예상 한대로 수행해야합니다. 불행히도 이것이 왜 그런지 설명 할 수는 없습니다 - 죄송합니다. blockmethodselfproto 포인터를 다른 방식으로 설정한다는 사실과 관련이 있다고 가정합니다.

method에서 다음을 시도해 볼 수 있습니다. block 및 비교 결과 :

call sender   #locals object of caller 
call message   #message used to call this method/block 
call activated  #the activated method/block 
call slotContext  #context in which slot was found 
call target   #current object