Get the value of an instance variable given its name Get the value of an instance variable given its name ruby ruby

Get the value of an instance variable given its name


The most idiomatic way to achieve this is:

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

There is no need to use + or intern; Ruby will handle this just fine. However, if you find yourself reaching into another object and pulling out its ivar, there's a reasonably good chance that you have broken encapsulation.

If you explicitly want to access an ivar, the right thing to do is to make it an accessor. Consider the following:

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

In this case, if you did Computer.new, you would be forced to use instance_variable_get to get at @cpus. But if you're doing this, you probably mean for @cpus to be public. What you should do is:

class Computer  attr_reader :cpusend

Now you can do Computer.new(4).cpus.

Note that you can reopen any existing class and make a private ivar into a reader. Since an accessor is just a method, you can do Computer.new(4).send(var_that_evaluates_to_cpus)


To get an instance variable from the name of an instance variable do:

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

This will return the value of the instance variable @paramName