在 Ruby 个模块中使用辅助方法
Using helper methods in Ruby modules
我在理解如何将我自己的辅助方法合并到 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 范围的哪一方面?
模块可以作为 mixins 集成到 classes 中。因此,您需要将它包含在 class 中,以便它可以与 class.
的 实例 一起使用
截至目前,您可以将 bar
作为您的模块方法,以便按原样访问它。
module MyModule
def self.foo
bar
end
def self.bar
puts "Now it works"
end
end
MyModule.foo #=> Now it works
A Module is a collection of methods and constants. The methods in a
module may be instance methods or module methods. Instance methods
appear as methods in a class when the module is included, module
methods do not.
您正在尝试从 class 方法调用实例方法。你必须写
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
得到你想要的。
你错过了方法的范围(模块和实例),基本上它是生命周期..
模块方法方式:-
以下是如何使用模块方法定义模块。
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
使用 class 实例化模块和调用方法将不起作用,因为它们不是实例方法。
输出-
called foo
bar got called
实例方法方式:- 以下是您将如何使用实例方法定义模块,以便它们在 classes 和对象之间工作..
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
我在理解如何将我自己的辅助方法合并到 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 范围的哪一方面?
模块可以作为 mixins 集成到 classes 中。因此,您需要将它包含在 class 中,以便它可以与 class.
的 实例 一起使用截至目前,您可以将 bar
作为您的模块方法,以便按原样访问它。
module MyModule
def self.foo
bar
end
def self.bar
puts "Now it works"
end
end
MyModule.foo #=> Now it works
A Module is a collection of methods and constants. The methods in a module may be instance methods or module methods. Instance methods appear as methods in a class when the module is included, module methods do not.
您正在尝试从 class 方法调用实例方法。你必须写
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
得到你想要的。
你错过了方法的范围(模块和实例),基本上它是生命周期..
模块方法方式:- 以下是如何使用模块方法定义模块。
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
使用 class 实例化模块和调用方法将不起作用,因为它们不是实例方法。
输出-
called foo
bar got called
实例方法方式:- 以下是您将如何使用实例方法定义模块,以便它们在 classes 和对象之间工作..
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