我正在做以下Ruby教程 http://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/48-advanced-modules/lessons/118-wrapping-up-modules
其中一个练习让我问
...在模块Math中定义静态方法square.它应该显然返回传递给它的数字的平方...
为什么只有在我用"self"作为方法定义的前缀时才有效?例如以下作品:
module Math
def self.square(x)
x ** 2
end
end
Run Code Online (Sandbox Code Playgroud)
但以下不起作用:
module Math
def square(x)
x ** 2
end
end
Run Code Online (Sandbox Code Playgroud)
为什么是这样?作为参考,该方法被称为puts Math.square(6)
内的模块的情况下,宣布的方法用self作为前缀使其成为模块的方法,一个可以不必被调用include或extend与模块.
如果您想要混合方法(默认方法)和模块方法(需要self前缀),您可以这样做:
module Math
# Define a mix-in method
def square(x)
x ** 2
end
# Make all mix-in methods available directly
extend self
end
Run Code Online (Sandbox Code Playgroud)
这应该具有通过Math.square直接调用使这些方法可用的效果.