将实例变量及其值转换为散列

Convert instance variables and their values into a hash

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

实现这种方法的最佳方式是什么?

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}

A Struct 是一种构造 Class 的方法,内置了一些额外的东西:一种简单的初始化方法和一种 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