Ruby:在类方法中使用模块方法

时间:2018-09-07 15:42:15

标签: ruby module mixins

我们如何在类方法中使用模块方法而不扩展模块?

module TestModule
  def module_method
    "module"
  end
end

class TestClass
  include TestModule

  def self.testSelfMethod
    str = module_method
    puts str
  end
  TestClass.testSelfMethod
end

然后返回:

test.rb:11:in `testSelfMethod': undefined local variable or method `module_method' for TestClass:Class (NameError)

2 个答案:

答案 0 :(得分:2)

通过包含模块,您可以使module_methodTestClass上的 instance 方法,这意味着您需要在类的实例(而不是类本身)上调用它

如果要使其成为类本身的方法,则需要extend TestModule,而不是include

module TestModule
  def module_method
    "module"
  end
end

class TestClass
  extend TestModule # extend, not include

  def self.testSelfMethod
    str = module_method
    puts str
  end
  TestClass.testSelfMethod # "method"
end

答案 1 :(得分:0)

仅因为注释中的字符太少,但同意maegar

module TestModule
  def module_method
    "module"
  end
end

class TestClass

  def self.testSelfMethod
    str = module_method + " from class"
    puts str
  end

  def testSelfMethod
    str = module_method + " from instance"
    puts str
  end
end

TestClass.extend TestModule
TestClass.testSelfMethod # => module from class

TestClass.include TestModule
TestClass.new.testSelfMethod # => module from instance