Я пытаюсь найти способ проверить, что 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 'для ... `