我想知道直接引用实例变量和调用返回相同实例变量的方法之间的区别是什么。
让我们采取以下块:
def some_method
return @var if @var.present?
...
end
功能方面,引用@var
和调用some_method
之间没有区别。两者都将返回相同的值(假设我们在同一个实例中)。
def another_method
var = @var
end
将同样如下:
def yet_another_method
var = some_method
end
这些方法如何相互不同?什么时候最后可能更好?
答案 0 :(得分:1)
当您不想准确获取实例变量时,将实例变量包装在方法中,但稍微多一点。例如,如果要记忆,则不要调用
@foo
而是你需要把它放在一个方法中并调用它
def foo; @foo ||= ... end
foo ...
或者如果你想在变量取一定值时返回一个不同于变量的值,那么你需要在其中加入一个条件
def foo
if @foo == ... then ... else @foo end
end
foo ...
答案 1 :(得分:0)
@bonus
包含在方法中,您可以通过实现自己的方法来更改bonus
的含义。这有助于您组织代码以便于更改,并使您能够依赖行为而不是数据。
class Pay
attr_accessor :bonus
def initialize(b)
@bonus = b
end
def bonus
@bonus = 100 if @bonus > 100
end
end