恒等写像とも言えるだろうか。
#初期化時にデフォルト値を定義する
hash = Hash.new{|h, k| h[k] = k}
#初期化時以外にデフォルト値のブロックを設定する場合
hash.default_proc = ->(h, k){h[k] = k}
p hash[1]
=> 1
p hash[:a]
=> :a
応用
上のままだとほとんど何もしないハッシュになるが、「特定の値のみ変換して残りの値は変換しないハッシュ」などといったものが定義できる。
old_departments = ["機械工学科", "電気工学科", "電子制御工学科", "工業化学科"]
rename = {
"電気工学科" => "電気電子工学科",
"工業化学科" => "物質工学科"
}
rename.default_proc = ->(h, k){ h[k] = k }
p new_departments = old_departments.map{|f| rename[f] }
=> ["機械工学科", "電気電子工学科", "電子制御工学科", "物質工学科"]
規則性のない大量のキーをベタで変換するような場合には簡潔に書けると思う。
ただ書いていてswitch使ったほうがよくねとも思い始めてきた。小ネタとして。