パイの計算
class Pai < Hash def initialize(params) params.keys.each do |key| self[key] = params[key] end end def +(other) keys = (self.keys + other.keys).uniq keys.inject(Pai.new({})) do |result, key| result[key] = (self[key] || 0) + (other[key] || 0) result end end end pai_aa = Pai.new a: 100, b:200, c:300 pai_bb = Pai.new b:300, c:400, d:500 pai_aa + pai_bb # {:a=>100, :b=>500, :c=>700, :d=>500}
DDDを読み直す機会があったので、素振り。
実数 + 実数 = 実数 (1+1=2)のように
パイ + パイ = パイ
の構造になっているのがポイントの一つ。