我有一个包含实例变量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'}
实施此类方法的最佳方式是什么?
答案 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