Answers:
实现此目的的最惯用的方法是:
some_object.instance_variable_get("@#{name}")
无需使用+或intern; Ruby会很好地处理这个问题。但是,如果您发现自己进入另一个对象并拉出它的ivar,则很有可能破坏了封装。
如果您明确想要访问ivar,则正确的做法是使其成为访问器。考虑以下:
class Computer
  def new(cpus)
    @cpus = cpus
  end
end
在这种情况下,如果您这样做了Computer.new,则将不得不使用instance_variable_getat @cpus。但是,如果您这样做,则可能意味着@cpus要公开。您应该做的是:
class Computer
  attr_reader :cpus
end
现在您可以做Computer.new(4).cpus。
请注意,您可以重新打开任何现有的类,并将私有ivar制成阅读器。由于访问器只是一种方法,因此您可以执行Computer.new(4).send(var_that_evaluates_to_cpus)
要从实例变量的名称获取实例变量,请执行以下操作:
name = "paramName"
instance_variable_get(("@" + name).intern)
这将返回实例变量的值 @paramName
:attr_reader varname以便随后可以以更简洁,更简洁的方式访问变量。