iolanguage getSlot不返回预期的对象

时间:2014-02-07 05:08:39

标签: iolanguage

最近我开始学习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”本身?

2 个答案:

答案 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")),这应该符合您的预期。不幸的是,我无法解释为什么会这样 - 抱歉。我认为这与blockmethod以不同方式设置selfproto指针的事实有关。

您可以在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