在Ruby中,如何在哈希而不是数组中获取实例变量?

时间:2010-05-13 21:15:44

标签: ruby-on-rails ruby instance-variables

我有一个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

4 个答案:

答案 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"}