Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a 'variable_get' method? If not, how can I create my own?

Tags:

ruby

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 :)

like image 204
Starkers Avatar asked Dec 11 '22 04:12

Starkers


1 Answers

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.

like image 132
Chuck Avatar answered Apr 30 '23 23:04

Chuck