访问Ruby模块中的方法

时间:2012-09-04 14:44:27

标签: ruby-on-rails ruby oop

我正在编写我的第一个Ruby模块,我有这个:

/app/module/test_modules/test.rb

test.rb看起来类似于:

module TestModules
  module Test

    def test
      puts 'this is a test'
    end
  end
end

当我从控制台调用以下内容时,我得到:

(main)> TestModule::Test.test
//NoMethodError: private method `test' called for TestModules::Test:Module

如何使test()可见?

4 个答案:

答案 0 :(得分:3)

您正在调用类方法,而您将test定义为实例方法。如果您通过includeextend使用该模块,则可以按照自己的方式调用它。 This article做得很好解释。

module TestModules
  module Test
    def self.test
      puts 'this is a test'
    end
  end
end

答案 1 :(得分:1)

此外,

1)

module TestModules
  module Test
    def test
      puts 'this is a test'
    end

    module_function :test
  end
end

2)

module TestModules
  module Test
    extend self
    def test
      puts 'this is a test'
    end
  end
end

答案 2 :(得分:1)

您定义方法的方式,它是Test实例上的方法 - 因此,如果您这样做,它将起作用:

blah = TestModule::Test.new
blah.test

注意 - 并以这种方式使用它,您需要将Test定义为class而不是module

如果您希望函数对类本身起作用,那么您需要像这样定义它:

def self.test
    ....
end

然后你可以TestModules::Test.test

答案 3 :(得分:0)

您定义的测试方法是实例方法...试试这个

module TestModules
  module Test
    def self.test
      puts 'this is a test'
    end
  end
end

现在您可以通过此TestModules :: Test.test

调用该方法