Fil*_*uzi 7 ruby oop design-patterns class object
@var_name在 ruby 中,您可以直接通过或通过 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
Run Code Online (Sandbox Code Playgroud)
解决方案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
Run Code Online (Sandbox Code Playgroud)
我会使用第二个选项:
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
Run Code Online (Sandbox Code Playgroud)
有两个原因:
attr_reader可能会更快(正如 Filip Bartuzi 已经指出的那样)attr_reader替换 可能会使以后重构该类变得更容易。attr_reader