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

问题描述:

在ruby中,您可以通过 @var_name 或通过私有getters attr_reader:var_name 直接内部访问变量。

In ruby you can internally access variables directly via @var_name or via private getters attr_reader :var_name.

哪个解决方案更多(语义?)正确?使用解决方案1或解决方案2的任何优点/缺点?

Which solution is more (semantically?) correct? Any advantages/disadvantages of using either solution 1 or solution 2?

解决方案1:

class Point
 def initialize(x, y)
   @x = x
   @y = y
 end

 def distance
   Math.sqrt(@x ** 2 + @y ** 2)
 end
end

$ b b

解决方案2:

Solution 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

有两个原因:


  1. attr_reader 可能是更快(Filip Bartuzi已指出)

  2. 使用 attr_reader 通过用自定义getter方法替换 attr_reader ,更容易重构该类。

  1. attr_reader might be faster (as Filip Bartuzi already pointed out)
  2. Using attr_reader might make it easier to refactor that class later on by replacing the attr_reader with a custom getter method.