iolanguage getSlot не возвращает ожидаемый объект
Недавно я начал изучать язык. Испытывая сообщение "method", я написал:
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 ответа
Решение
По словам гида method()
вводит объект для хранения местных жителей и устанавливает местные self
указатель на цель сообщения. Таким образом, нет слотов от цели, но мы можем получить их через self
:
Io> f := method(self getSlot("f"))
==> method(
self getSlot("f")
)
Io> f
==> method(
self getSlot("f")
)
Пытаться 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