Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么在方法前面加上“前缀”;“自我”;_Ruby_Self - Fatal编程技术网

Ruby 为什么在方法前面加上“前缀”;“自我”;

Ruby 为什么在方法前面加上“前缀”;“自我”;,ruby,self,Ruby,Self,我正在做下面的Ruby教程 其中一个练习要求我 …在数学模块中定义静态方法平方。它显然应该返回传递给它的数字的平方 为什么只有在方法定义前面加上“self”时它才起作用?例如,以下工作: module Math def self.square(x) x ** 2 end end 但以下措施不起作用: module Math def square(x) x ** 2 end end 为什么会这样?作为参考,该方法的调用类似于将Math.square(6)放入方

我正在做下面的Ruby教程

其中一个练习要求我

…在数学模块中定义静态方法平方。它显然应该返回传递给它的数字的平方

为什么只有在方法定义前面加上“self”时它才起作用?例如,以下工作:

module Math
  def self.square(x)
    x ** 2
  end
end
但以下措施不起作用:

module Math
  def square(x)
    x ** 2
  end
end

为什么会这样?作为参考,该方法的调用类似于将Math.square(6)

放入方法定义中,如果您没有
self.
,则该方法在该类的实例上定义。由于
Math
不是
Math
的实例,没有它就无法工作。

在模块的上下文中,将
self
作为前缀声明方法将使其成为模块方法,无需
包含
扩展模块即可调用该方法

如果希望使用默认的混合方法和需要
self
前缀的模块方法,可以执行以下操作:

module Math
  # Define a mix-in method
  def square(x)
    x ** 2
  end

  # Make all mix-in methods available directly
  extend self
end

通过直接调用
Math.square
可以使这些方法可用。

请参见“谢谢!”!所以,如果我理解正确,没有“self”的声明将迫使我在任何我想使用它的地方使用像include或extend这样的mixin。。。而使用“self”声明将允许我像MyModule.MyMethod一样调用它,这一点是完全正确的。类也有类似的情况,只是继承的不是
include
extend