豊福@パパイヤです。

  「nilが +演算だけ特別扱いする」実質的な理由は
ハッシュが nil以外のデフォルト値を持たない(nil
をチェックしてから処理するように書くのがちょっと
面倒だ)からなんですよね。
  そこでハッシュにデフォルト値を持たせるというの
はどうでしょう。下のプログラムのような感じのです。

問題点
・デフォルト値を delete できない
・sort(などほとんどのメソッド)はデフォルト値を
  考慮しない
・そもそも必要ない (;_;)

class MyHash
    def initialize(h, &blk)
        @h = h
        @dflt = blk
    end
    def [](key)
        (@h[key] != nil) ? @h[key] : @dflt.call(key)
    end
    def method_missing(*args)
        @h.send(*args)
    end
end
---
			豊福@パパイヤ
			unbound / papaya.juice.or.jp
			toyofuku / juice.or.jp