iolanguage getSlot не возвращает ожидаемый объект

Недавно я начал изучать язык. Испытывая сообщение "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 вернет ноль вместо самого f?

2 ответа

Решение

По словам гида method() вводит объект для хранения местных жителей и устанавливает местные self указатель на цель сообщения. Таким образом, нет слотов от цели, но мы можем получить их через self:

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

Пытаться 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
Другие вопросы по тегам