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

标签 ruby class oop object design-patterns

在 ruby​​ 中,您可以通过 @var_name 或通过私有(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

解决方案 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 可能是 faster (正如 Filip Bartuzi 已经指出的那样)
  2. 使用 attr_reader 可以更轻松地重构该类,方法是将 attr_reader 替换为自定义 getter 方法。

关于Ruby:我应该如何访问类中的实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33451588/

相关文章:

php - 在自定义 OO PHP 框架中使用接口(interface)

java - 将多个 Java 对象数组传递给另一个方法

ruby-on-rails - 查找 Ruby 数组数组的所有排列

ruby - 从 ruby​​ 执行 powershell 命令

c# - 如何从另一个类引用 3D 数组?

python - 如何在 Python 中获取类的文件路径?

c++ - 什么在 C++ 中使用更多内存?一个 2 个整数或 2 个函数?

ruby - ruby 中的 Set 如何比较元素?

ruby - DRY 与重复特征规范

php - 如何将全局变量传递给 PHP 中的类?