最近我开始学习iolanguage。在尝试“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会返回 nil 而不是“f”本身?
答案 0 :(得分:2)
根据guide method()
引入了一个Object来存储本地,并将本地self
指针设置为消息的目标。
因此,目标没有插槽,但我们可以通过self
:
Io> f := method(self getSlot("f"))
==> method(
self getSlot("f")
)
Io> f
==> method(
self getSlot("f")
)
答案 1 :(得分: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