在ruby中,你可以通过@var_name
或者私有getter attr_reader :var_name
直接访问内部变量。
哪种解决方案更 (语义上?) 正确?使用解决方案1或解决方案2有什么优点/缺点?
解决方案1:
class Point
def initialize(x, y)
@x = x
@y = y
end
def distance
Math.sqrt(@x ** 2 + @y ** 2)
end
end
解决方案二:
class Point
def initialize(x, y)
@x = x
@y = y
end
def distance
Math.sqrt(x ** 2 + y ** 2)
end
private
attr_reader :x, :y
end
2条答案
按热度按时间to94eoyn1#
我会使用第二个选项:
原因有二:
attr_reader
可能更快(正如Filip Bartuzi已经指出的)1.使用
attr_reader
可能会使以后通过用定制getter方法替换attr_reader
来重构该类变得更容易。roqulrg32#
attr_reader :x, :y
定义了以下函数:所以这两种方法是等价的,实际上是相同的。在这两种情况下,性能也是similar,尽管
attr_reader
可能比其他一些变量访问方法更快。