将实例变量及其值转换为散列
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
我有一个 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