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

arknldoa  于 2023-03-17  发布在  Ruby
关注(0)|答案(2)|浏览(151)

在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

解决方案二:

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
to94eoyn

to94eoyn1#

我会使用第二个选项:

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已经指出的)
    1.使用attr_reader可能会使以后通过用定制getter方法替换attr_reader来重构该类变得更容易。
roqulrg3

roqulrg32#

attr_reader :x, :y定义了以下函数:

def x
  @x
end

def y
  @y
end

所以这两种方法是等价的,实际上是相同的。在这两种情况下,性能也是similar,尽管attr_reader可能比其他一些变量访问方法更快。

相关问题