1.9とJSON
すばらしい。ruby1.9のHashはJSON風にも書けるようになってた。
ハッシュ生成は多くの場合以下のようなリテラル(ハッシュ式)で行われます。
http://doc.loveruby.net/refm/api/view/class/Hash
{a => b, ... } #aはキー、bは値となる
{s: b , ... } #{ :s => b, ... } と同じ。キーがシンボルの場合の省略した書き方
さっそく試してみる。
ドキュメントを見ればわかるけど、シンボルの場合の特例なので残念ながらRFC準拠のJSONは通らない。
せっかくの非互換バージョンアップなんだから全面的に=>から:に移行してしまってもよかったんじゃないだろうか。
irb> {a:1,b:2} => {:a=>1, :b=>2} irb> {"a":1,"b":2} SyntaxError: (irb):2: syntax error, unexpected ':', expecting tASSOC {"a":1,"b":2} ^
せっかくなのでちょっとだけJavaScriptのオブジェクトと同じ挙動にしてみる。
irb> class Hash irb> def method_missing(m,*v) irb> m=~/(.*?)=$/ ? self[$1.to_sym]=v[0] : self[m] irb> end irb> end => nil irb> obj={a:1,b:2} => {:a=>1, :b=>2} irb> obj.a => 1 irb> obj.a=3 => 3 irb> obj.a => 3
んー、いいかんじ(?)