给定以下代码:

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/

10-10 00:06