Question

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?

Was it helpful?

Solution

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")
)

OTHER TIPS

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top