In Ruby, how can I get instance variables in a hash instead of an array?

你。 提交于 2019-11-27 18:06:18

问题


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?


回答1:


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



回答2:


Question is quite old but found rails solution for this: instance_values

This is first answer in google so maybe it will help someone.




回答3:


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



回答4:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!