为什么要在方法前面加上"self"



我正在做下面的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作为前缀声明方法使其成为模块方法,无需使用模块的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

在方法定义中,如果没有self.,则在该类的实例上定义。由于Math不是Math的实例,因此没有CC_9将无法工作。

最新更新