From: EGUCHI Osamu Date: 2011-01-08T16:50:31+09:00 Subject: [ruby-dev:42986] Re: 特異メソッドの定義の簡略化 えぐち@エスアンドイーです 2011年1月8日15:34 Kenta Murata : > 2011年1月8日14:44 EGUCHI Osamu : >> s = {size: 5} >> s.size # => 1 >> s->size # => 5 >> >> のように hash->key を hash[”key”] の省略記法にできないでしょうか? > > いくつか疑問点が生じます。 > > (1) -> は演算子なんでしょうか? それとも特殊な構文なのでしょうか? ``.’’ って演算子でしたっけ? ``.’’ と同じ文法上の位置づけと考えてます。 > (2) 最近はハッシュのキーを文字列ではなく Symbol にする人が多いように思えますが、 > この省略記法では Symbol のキーには対応できないんですよね。 > hash["key"] と hash[:key] が同時に存在している場合とかどうなるんでしょう? Symbol 使えるといいですね String とは違う記号にすしないと厄介なことになりそうに思えます。 > (3) hash["key"] という式は、hash.send(:[], "key") とほとんど同じものです。 > ですから、Hash ではなく Array に対して使うと ary->2 のような書き方になりそうです。 > そういう用途は想定されていますか? Arrayに適用は思い至りませんでしたが key に Number が来た場合 それっぽい挙動をしてくれないと使いにくいかなとは思いました。 >> 文法的には拡張の余地がある(既存の構文との衝突はない)と思います。 > > -> という記号は、既に Proc を生成するための構文で使われていますね。 それには気づきませんでした。・・どんな構文でしたっけ? えぐち