我在理解如何将自己的帮助器方法合并到Ruby模块中时遇到了一些麻烦。
我的代码:
module MyModule
def self.foo
bar
end
def bar
# helper for MyModule.foo
end
end
MyModule.foo
#=> NameError: undefined local variable or method `bar' for MyModule:Module
我不确定为什么MyModule
无法识别bar
方法。我忽略了Ruby中范围的哪个方面?
答案 0 :(得分:1)
您正在尝试从类方法中调用实例方法。你必须写
module MyModule
def MyModule.foo
MyModule.bar
end
# Or you can have it this way
def MyModule::bar
# helper for MyModule.foo
end
end
MyModule.foo
得到你想要的东西。
答案 1 :(得分:0)
您错过了方法(模块和实例)的范围,基本上是它的生命周期..
模块方法: - 以下是如何使用模块方法定义模块。
module MyModule
def self.foo
puts "called self.foo"
bar
end
def self.bar
puts "self.bar got called"
# helper for MyModule.foo
end
end
现在,这样,您不必实例化任何对象来调用这些方法。以下是调用方法的方法(一个在另一个内部)
MyModule.foo
使用类来实例化Module并调用方法将不起作用,因为它们不是实例方法。
输出 -
called foo
bar got called
实例方法方法: - 以下是您如何使用实例方法定义模块,以便它们可以在类和对象之间工作。
module MyModule
def foo
puts "called foo"
bar
end
def bar
puts "bar got called"
# helper for MyModule.foo
end
end
class TestModule
include MyModule
end
选择以这种方式使用模块方法,您必须按照以下方式调用模块内的方法 -
#instantiating module MyModule via class
myinstance = TestModule.new
myinstance.foo
输出 -
called foo
bar got called