Ruby:我应该如何访问类中的实例变量? [英] Ruby: How should I access instance variables inside a class?

查看:342
本文介绍了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.

这篇关于Ruby:我应该如何访问类中的实例变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆