我正在做下面的Ruby教程http://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/48-advanced-modules/lessons/118-wrapping-up-modules
其中一个练习要求我
…在Math模块中定义了一个静态方法square。显然,它应该返回传递给它的数字的平方…
为什么它只工作,当我前缀的方法定义"自我"?例如:
module Math
def self.square(x)
x ** 2
end
end
但是下面的代码不起作用:
module Math
def square(x)
x ** 2
end
end
为什么会这样?作为参考,该方法的调用方式为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
在方法定义中,如果没有self.
,则在该类的实例上定义。由于Math
不是Math
的实例,因此没有CC_9将无法工作。