courtesy of irb:
2.0.0-p0 :006 > @instance_variable = "from an instance variable"
=> "from an instance variable"
2.0.0-p0 :007 > variable = "from a variable"
=> "from a variable"
2.0.0-p0 :008 > instance_variable_get(:@instance_variable)
=> "from an instance variable"
2.0.0-p0 :009 > variable_get(:variable)
NoMethodError: undefined method `variable_get' for main:Object
from (irb):9
from /usr/local/rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'
2.0.0-p0 :010 >
I'm simply trying to programmatically 'query' for a variable and return its contents. Exactly like instance_variable_get but for a variable.
It's for a custom rspec matcher. Not some crazy workaround :)
In Ruby 2.1 and later, you can use Binding#local_variable_get
.
In prior versions of Ruby, you have to use eval
. If you want to do some sanity-checking before evaluating a supposed variable name, you can check whether the named variable is in local_variables
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With