如何获取实例变量的值(给定其名称)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

一般来说,我怎样才能得到一个字符串中对象名称的引用?

更具体地说,我有一个参数名称列表(成员变量 - 动态构建,所以我不能直接引用它们)。

每个参数都是一个也有from_s方法的对象。

我想做类似下面的事情(这当然不起作用......):

define_method(:from_s) do | arg |
    @ordered_parameter_names.each do | param |
        instance_eval "field_ref = @#{param}"
        field_ref.from_s(param)
    end
end
提问于
用户回答回答于

达到这个最好的方式是:

some_object.instance_variable_get("@#{name}")

没有必要使用+intern; Ruby将会很好地处理这个问题。

如果你明确想要访问ivar,正确的做法是将其设为访问者。考虑以下:

class Computer
  def new(cpus)
    @cpus = cpus
  end
end

在这种情况下,如果你这样做Computer.new,你将被迫使用instance_variable_get获得的@cpus。但如果你这样做,你可能意味着@cpus公开。你应该做的是:

class Computer
  attr_reader :cpus
end

现在你可以做Computer.new(4).cpus

用户回答回答于

要从实例变量的名称中获取实例变量,请执行以下操作:

name = "paramName"
instance_variable_get(("@" + name).intern)

这将返回实例变量的值。@paramName

扫码关注云+社区