Ruby 为什么在方法前面加上“前缀”;“自我”;
我正在做下面的Ruby教程 其中一个练习要求我 …在数学模块中定义静态方法平方。它显然应该返回传递给它的数字的平方 为什么只有在方法定义前面加上“self”时它才起作用?例如,以下工作: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)放入方
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
。