ruby模块中的NoMethodError

时间:2017-03-10 04:49:28

标签: ruby module

000
001
010
011
100
101
110
111

任何人都可以告诉我我错过了什么以及为什么我会收到此错误 - >

对于Add:Module(NoMethodError)

未定义的方法`add'

2 个答案:

答案 0 :(得分:2)

您正在混淆类方法和实例方法。你的定义:

module Add
  def addition
    ...
  end
end

Add的实例上定义方法,而您在模块Add上调用了一个方法。如果要定义类/模块方法,则需要定义如下:

module Add
  def self.addition
    ...
  end
end

答案 1 :(得分:1)

如果您希望能够直接调用它,请将其定义为可直接访问的方法:

def self.addition
  # ...
end

或者你总是可以使用以下方式重做:

module Add
  # ...(methods)...

  extend self
end

这会自动将所有mixin类型的方法推广为可直接访问。

你也可以选择性地标记它们:

module Add
  def addition
    # ...
  end
  module_method :addition
end

然后该方法可以Add.addition或其他模块或类调用include Add