From: Yukihiro Matsumoto Date: 2007-12-14T17:34:51+09:00 Subject: [ruby-dev:32596] Re: /(?...)/ =~ str assigns foo まつもと ゆきひろです In message "Re: [ruby-dev:32588] /(?...)/ =~ str assigns foo" on Fri, 14 Dec 2007 08:38:56 +0900, Tanaka Akira writes: |以下のように named capture の結果を自動的に変数に代入させた |いのですがどうでしょうか。 えー、どうなんだろうなあ。 |% ./ruby -e ' |/(?\w+)/ =~ " foo " |p word |' |"foo" | |代入が起こる条件は、named capture を含み、#{} などによる動的 |な展開の含まれていない正規表現が =~ の左辺にリテラルとして表 |れたとき、です。 | |なお、マッチしなかった場合は nil を代入するようにしています。 この仕様そのものは整合性と合理性はあると思います。その点は認 めるのですが、 * 今までいわゆる代入以外でローカル変数が登場する文法はブロッ クパラメータしかなく、新しいものを導入するのは抵抗がある のではないか。しかし、互換性の問題はないので、要するに慣 れだけの問題という気もする。 * ある変数がローカル変数か無引数のメソッド呼び出しかを区別 するのがやや困難になるのではないか。しかし、今でも文字列 中の式展開の内部に代入があればリテラル内もチェックする必 要があるので、圧倒的に困難になるとまでは言えないような気 もする。 というわけで、即決できません。特にローカル変数の判別が難しく なる(かもしれない)のは懸念です。タイミングを考えると1.9.1に導 入するのは難しいかも。 まつもと ゆきひろ /:|)