Ruby:我应该如何访问类中的实例变量?

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)

spi*_*ann 4

我会使用第二个选项:

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)

有两个原因:

  1. attr_reader可能会更快(正如 Filip Bartuzi 已经指出的那样)
  2. 使用自定义 getter 方法attr_reader替换 可能会使以后重构该类变得更容易。attr_reader