我正在编写我的第一个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()可见?
答案 0 :(得分:3)
您正在调用类方法,而您将test
定义为实例方法。如果您通过include
或extend
使用该模块,则可以按照自己的方式调用它。 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
调用该方法