Recently i started to learn iolanguage. When trying out the "method" message, i wrote:

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

But why calling to f will return nil instead of "f" itself?

有帮助吗?

解决方案

According to guide method() introduces an Object to store locals and sets the local's self pointer to the target of the message. Thus there is no slots from target but we can get them through self:

Io> f := method(self getSlot("f"))
==> method(
    self getSlot("f")
)
Io> f
==> method(
    self getSlot("f")
)

其他提示

Try g := block(getSlot("g")), which should do what you expect. Unfortunately, I can not explain why this is the case - sorry. I suppose it has to do with the fact that block and method set the self and proto pointer in different ways.

You can try the following within a method resp. block and compare the results:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top