2010-05-13 49 views
10

我有一个Ruby类。我想从一个参数中获取一个实例变量给该类中的一个方法。我能做到让所有的实例变量的一个数组:在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

你能详细说一下吗?你的问题不是很清楚。 – 2010-05-13 21:28:10

+4

看起来您希望构建一个将实例变量映射到其值的散列,以便您可以检索实例变量的值。如果是这样,为什么?使用'instance_variable_get'。 – cam 2011-02-02 03:17:42

回答

17

要创建您可以使用下面的代码的所有实例变量的哈希:

class Object 
    def instance_variables_hash 
    Hash[instance_variables.map { |name| [name, instance_variable_get(name)] } ] 
    end 
end 

但在他的评论中提及凸轮,你应该使用instance_variable_get方法代替:

object.instance_variable_get :@my_instance_var 
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 
+0

请注意,'[1..s.size]'可以替换为[1 ..- 1]'。 – 2015-05-07 17:55:43

5

问题是相当古老的,但发现此解决方案的轨道解决方案:instance_values

这是谷歌的第一个答案,所以也许它会帮助别人。

+0

感谢您帮助社区。我不再使用ruby/rails,转移到node.js.最好的 – 2014-10-20 13:35:38

+0

Rails使用的代码与接受的答案几乎相同,只是Rails除去前导的'@'。 – 2015-05-07 17:54:53

-1

Ruby on Rails有几种内置的方法可以满足您的需求。

用户= User.new(第一: '布赖恩',最后: '案件')

user.attributes

{“first”=>“brian”,“last”=>“case”}

user.serializeable_hash

{ “第一”=> “布赖恩”, “最后一个”=> “的情况下”}

+0

这仅适用于Rails模型(“ActiveRecord :: Base”的实例)。对于任意的Ruby对象,@ sufleR的答案是有效的。 – 2016-08-17 16:18:39

相关问题