为什么用"自我"前缀一个方法

Ric*_*cky 3 ruby self

我正在做以下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)

tad*_*man 6

内的模块的情况下,宣布的方法用self作为前缀使其成为模块的方法,一个可以不必被调用includeextend与模块.

如果您想要混合方法(默认方法)和模块方法(需要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直接调用使这些方法可用的效果.