给定以下代码:
class Animal
def noise=(noise)
@noise = noise
end
def noise
@noise
end
end
animal1 = Animal.new
animal1.noise = "Moo!"
puts animal1.noise
animal2 = Animal.new
animal2.noise = "Quack!"
puts animal2.noise
ruby如何区分noise和noise=(参数)?通常当两个方法用ruby写出来时,最新的一个会胜出,但只是想知道两个同名的方法怎么可能以这种方式写出来,而不会一个覆盖另一个。
最佳答案
因为这是两个不同的方法名。在ruby中,带有=
的方法名是一个赋值方法,这是一个习惯用法。当解释程序解析源代码时,它会看到
def noise
和
def noise=
如果你在第一个噪声方法中去掉
=
,你会观察到你期望的行为。如果你真的对ruby中方法查找的工作原理非常感兴趣(而且你应该知道这对每个ruby程序员来说都非常重要),那么请检查这个post关于ruby - Ruby如何区分Method和Method =(parameter)(同名的getter/setter方法)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40117488/