arrays - 访问对象数组中的实例变量值 : Ruby

标签 arrays ruby instance-variables

我有一组带有一个实例变量的对象:

oranges_array = 
[#<Orange:0x007faade859ea0 @diameter=2.7>,
 #<Orange:0x007faade859ef0 @diameter=2.8>,
 #<Orange:0x007faade859f40 @diameter=2.6>]

例如,我将如何访问直径实例变量?我想最终得到他们的平均值。我是否需要或者我是否在正确的轨道上思考我可能使用每个循环将每个直径铲到它自己的数组然后使用 inject?或者是否有更简单的方法来访问直径变量?谢谢!

最佳答案

一种选择是将 attr_reader 添加到 Orange 类:

class Orange
  attr_reader :diameter
end

现在你可以得到平均值:

avg = oranges_array.map(&:diameter).inject(:+) / oranges_array.size.to_f
# with Ruby 2.4+ you can do the following:
# avg = oranges_array.sum(&:diameter) / oranges_array.size.to_f

另一种选择是使用 Object#instance_variable_get (无需将 attr_reader 添加到类中:

avg = oranges_array.map { |orange| orange.instance_variable_get(:@diameter) }.inject(:+) / oranges_array.size.to_f

注意:

为此任务使用 instance_variable_get最后的选择,我添加它几乎完全是为了表明有一种方法可以获取对象的实例变量,以防万一,因为例如,无法在类中定义属性读取器。

关于arrays - 访问对象数组中的实例变量值 : Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41561171/

相关文章:

mysql - 将 perl 数组返回给 MATLAB

java - 无法将 int[] 转换为 int

arrays - RTTI 动态数组 TValue Delphi 2010

python - 类设计: Initializing and updating instance variables elegantly

arrays - list 不可用时的情况

ruby-on-rails - Cucumber BDD for RAILS/ActiveRecord - 通过填充数据库层来加速慢速测试?

ruby-on-rails - 错误 : undefined local variable or method `resource_class' when installing omniauth-twitter

ruby-on-rails - Ruby JSON.pretty_generate ... 很不漂亮

java - 当我尝试将实例变量打印为引用变量时,为什么会出现异常?

objective-c - @interface 或@implementation 中的私有(private)ivar