可转发NoMethodError:nil:NilClass的未定义方法”,尽管response_to?返回true

时间:2019-02-08 20:05:39

标签: ruby-on-rails

我试图找出一种方法来检查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.newitm.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'的... `

0 个答案:

没有答案