有时我会看到像
这样的代码class Thing
def self.add_em(a,b)
a+b
end
end
有时候我会看到
class Thing
def self.add_em(a,b)
@a=a
@b=b
@a+@b
end
end
何时/为什么我应该使用@
实例变量而不是仅使用传递的参数?
我认为一个原因是,如果您想在任何其他方法中使用这些变量,那么实例变量将可用,而基于参数的本地变量则不会。但是我经常看到正在使用@变量,即使变量没有在任何其他方法中使用。
所以我看到的模式 @ A = A @ B = 在所使用的所有参数的方法的开始处使用了很多,但我不清楚为什么它们只是用在那个方法上。它只是一种惯例,以防它们被用于其他方法吗?
答案 0 :(得分:2)
正如您所知,定义实例变量没有意义,除非它们在另一个方法中使用。如果使用实例变量但未在任何其他方法中调用,则该代码可能不是由优秀的程序员编写的。
但请注意,有时,方法定义初看起来并不明显。例如,如果有
class Thing
attr_reader :a
end
然后实际上有一种方法使用@a
。
答案 1 :(得分:1)
我会说他们这样做是因为他们计划将参数作为实例变量引用。如果不是他们失败了YAGNI(你不需要它原则)。如果他们改变了一半的想法(已知会发生......),他们就忘了整理了。