Classをインスタンス化する時にHashで渡した値でInitializeする
class Person
attr_accessor :name, :age, :address
def initialize( hash={})
if block_given?
yield( self )
else
hash.each do |k, v|
public_send("#{k}=", v) if respond_to?("#{k}=")
end
end
end
def to_s
instance_variables.map do |ivar|
value = self.send( ivar.to_s.tr("@", ""))
"#{ivar}: #{value}"
end.join(", ")
end
end
p1 = Person.new({name: "taro", age: 20, address: 'tokyo'})
puts p1
p2 = Person.new do |f|
f.name = "jiro"
f.age = 30
f.address = "tokyo"
end
puts p2
class Man < Person
def initialize(hash={})
super(hash)
end
end
puts Man.new({name: "saburo", age: 25, address: "saitama"})