2

最近我开始学习iolanguage。在尝试“方法”消息时,我写道:

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"本身呢?

4

2 回答 2

2

根据指南 method()介绍了一个对象来存储本地,并将本地的self指针设置为消息的目标。因此,目标没有插槽,但我们可以通过self

Io> f := method(self getSlot("f"))
==> method(
    self getSlot("f")
)
Io> f
==> method(
    self getSlot("f")
)
于 2015-03-26T12:32:50.137 回答
0

Try g := block(getSlot("g")),这应该符合您的期望。不幸的是,我无法解释为什么会这样——抱歉。我想这与block以不同方式method设置selfand指针有关。proto

您可以尝试以下操作methodblock并比较结果:

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
于 2014-02-09T10:38:45.120 回答