在 ruby 中,您可以通过 @var_name
或通过私有(private) getters attr_reader :var_name
直接在内部访问变量。
哪种解决方案更(语义上?)正确?使用解决方案 1 或解决方案 2 的任何优点/缺点?
解决方案一:
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
最佳答案
我会使用第二个选项:
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
可以更轻松地重构该类,方法是将attr_reader
替换为自定义 getter 方法。
关于Ruby:我应该如何访问类中的实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33451588/