11

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

4 回答 4

23

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

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
于 2011-12-07T14:55:59.673 回答
11

问题很老,但找到了解决方案:instance_values

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

于 2014-10-20T13:14:13.643 回答
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
于 2011-12-07T14:05:54.990 回答
-1

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

user = User.new(first: 'brian', last: 'case')

用户属性

{"first"=>"brian", "last"=>"case"}

user.serializeable_hash

{"first"=>"brian", "last"=>"case"}

于 2016-03-25T22:59:03.427 回答