I have a Ruby class. I want to get an instance variable from an argument to a method in that class. I can do get all of the instance variables as an array:
self.instance_variables
However, I want to get the instance variable named arg
, specifically:
class MyClass
def get_instance_variable(arg)
hash_of_instance_variables[arg]
end
end
object.get_instance_variable('my_instance_var')
How do I compute hash_of_instance_variables
?
To create a hash of all instance variables you can use the following code:
class Object
def instance_variables_hash
Hash[instance_variables.map { |name| [name, instance_variable_get(name)] } ]
end
end
But as cam mentioned in his comment, you should use instance_variable_get
method instead:
object.instance_variable_get :@my_instance_var
Question is quite old but found rails solution for this: instance_values
This is first answer in google so maybe it will help someone.
class MyClass
def variables_to_hash
h = {}
instance_variables.each{|a|
s = a.to_s
n = s[1..s.size]
v = instance_variable_get a
h[n] = v
}
h
end
end
Ruby on Rails has a couple of built-in ways to do this that you might find meet your needs.
user = User.new(first: 'brian', last: 'case')
- attributes (Rails API: ActiveModel::AttributeMethods)
user.attributes
{"first"=>"brian", "last"=>"case"}
- serializable_hash (Rails API: Active Model Serialization)
user.serializeable_hash
{"first"=>"brian", "last"=>"case"}
来源:https://stackoverflow.com/questions/2830368/in-ruby-how-can-i-get-instance-variables-in-a-hash-instead-of-an-array