Forwardable NoMethodError: неопределенный метод '' для nil: NilClass, хотя response_to?возвращает истину - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь найти способ проверить, что Forwardable может вызывать метод для переменной экземпляра (которая может быть nil).Перед вызовом метода.

.respond_to?- возвращает true, хотя оболочка класса может иметь экземпляр = nil

, иметь класс

class TestClass
  def prt
    puts 1
  end
end

, иметь другой класс, который extend Forwardable

class FTestClass
  extend Forwardable
  def init(item)
    @item=item
  end
  def_delegators :@item, :prt, :test_method
end

, тогда мыможет создать экземпляр класса-оболочки, т.е.

itm=FTestClass.new и itm.respond_to?(:prt) возвращает true, что выглядит логично

, но переменная экземпляра @item не была инициализирована, потому что я НЕ ДЕЛАЛзвоните itm.init(TestClass.new)

и если я позвоню itm.prt, я получу
NoMethodError: undefined method 'prt' for nil:NilClass

Вопрос 1 - как правильно проверить, есть ли у класса переадресации, кудаВызов метода forward перед вызовом.Это означает, что я понимаю, что могу добавить любой метод к классу-обертке, включая тот, который проверял бы, была ли назначена переменная экземпляра.

или просто переопределял .respond_to? в классе-обёртке ... не уверен, что это правильный путьи нет встроенного пути.

Вопрос 2 - даже после itm.init(TestClass.new) я все еще не могу вызвать itm.test_method, потому что у внутреннего класса нет этого метода, и я собираюсь получить NoMethodError: undefined method test_method 'для ... `

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...