2014-02-07 1 views
2

Недавно я начал изучать язык. При попытке из «метода» сообщения , я писал: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» сама?

ответ

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")), что должно делать то, что вы ожидаете. К сожалению, я не могу объяснить, почему это так - извините. Я полагаю, что это связано с тем, что block и method устанавливают указатели self и proto по-разному.

Вы можете попробовать следующее в пределах 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 
Смежные вопросы