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