我试图找出一种方法来检查Forwardable是否可以对实例变量(可以为nil)调用方法。在调用方法之前。
.respond_to? -返回true,尽管类包装器可能具有instance = 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-在调用类之前检查转发类是否具有转发方法调用的正确方法是什么?这意味着我意识到我可以向包装器类添加任何方法,包括一种用于检查是否分配了实例变量的方法。
或者只是在包装器类中覆盖.respond_to?
...不确定这是正确的方法,也没有内置的方法。
问题2-甚至在itm.init(TestClass.new)
之后,我仍然无法调用itm.test_method
,因为内部类没有此方法,我将获得NoMethodError: undefined method
test_method'的... `