在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
解决方案2:
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
答案 0 :(得分:3)
我会使用第二个选项:
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
有两个原因:
attr_reader
可能是faster(正如Filip Bartuzi已经指出的那样)attr_reader
可能会更容易通过使用自定义getter方法替换attr_reader
来重构该类。 答案 1 :(得分:0)