我有一个Ruby类。我想从参数获取一个实例变量到该类中的方法。我可以将所有实例变量作为数组获取:
self.instance_variables
但是,我想获取名为arg
的实例变量,具体为:
class MyClass
def get_instance_variable(arg)
hash_of_instance_variables[arg]
end
end
object.get_instance_variable('my_instance_var')
如何计算hash_of_instance_variables
?
答案 0 :(得分:19)
要创建所有实例变量的哈希,可以使用以下代码:
class Object
def instance_variables_hash
Hash[instance_variables.map { |name| [name, instance_variable_get(name)] } ]
end
end
但是,正如评论中提到的 cam 一样,您应该使用instance_variable_get
方法:
object.instance_variable_get :@my_instance_var
答案 1 :(得分:7)
问题已经很久了,但找到了解决方案:instance_values
这是谷歌的第一个答案,所以它可能对某人有帮助。
答案 2 :(得分:1)
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
答案 3 :(得分:-1)
Ruby on Rails有几种内置方法可以满足您的需求。
user = User.new(first:' brian',last:' case')
user.attributes
{" first" =>" brian"," last" =>" case"}
user.serializeable_hash
{" first" =>" brian"," last" =>" case"}