给出以下代码:
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如何区分噪音和噪音=(参数)?通常当在Ruby中编写两个方法时,最新的方法会胜出,但只是想知道如何以这种方式编写两个同名方法,而不会覆盖另一个。
答案 0 :(得分:3)
因为这是两个不同的方法名称。在ruby中,具有=
的方法名称是赋值方法的习惯用法。当解释器解析源代码时,它会看到
def noise
和
def noise=
如果您要在第一种噪音方法中取出=
,您会观察到您所期望的行为。如果你真的对如何在ruby中查找方法的细节感兴趣(并且你应该知道每个红宝石程序员都非常重要),请查看post
答案 1 :(得分:3)
Ruby如何区分
noise
和noise = (parameter)
?
因为他们有不同的名字。 noise=(parameter)
(正确定义,没有空格,通常称为 setter方法因为设置 @noise)与noise
不同(通常被称为 getter方法,因为获取 @noise)。
=
是方法名称的一部分。在方法名称末尾使用=
时,可以使用参数 set @noise调用该方法:
animal.noise=('baaaa')
但Ruby的syntactic sugar允许你简单地写。
animal.noise = 'baaaa'
然后获取返回@noise
的值,我们称之为noise
方法:
animal.noise #=> 'baaaa'