将实例变量及其值转换为哈希值

时间:2015-03-07 10:08:03

标签: ruby hash instance-variables

我有一个包含实例变量MyClass@id的课程@color

class MyClass
  attr_accessor :id, :color
end

我通过以下方式创建了一个对象:

d = MyClass.new
d.id = 2
d.color = 'red'
d #=> #<MyClass:0x00000005fb52c0 @id=2, @color="red"> 

我想获得一个包含实例变量及其值的哈希:

d.to_hash #=> { id: 2, color: 'red'}

实施此类方法的最佳方式是什么?

2 个答案:

答案 0 :(得分:5)

class Klass
  def initialize
    @a = 2
    @b = 2
  end

  # define your own methods
  def attributes
    instance_variables.map do |var| 
      [var[1..-1].to_sym, instance_variable_get(var)]
    end.to_h
  end
end

Klass.new.attributes # => {:a=>2, :b=>2}

答案 1 :(得分:2)

Struct是一种构建类的方法,内置一些额外的内容:一种简单的初始化方法和to_h方法。

MyClass = Struct.new(:id, :color)
d = MyClass.new(2, "red")
p d.to_h # => {:id=>2, :color=>"red"}

# MyClass is a Class:
p d.class # => MyClass