From: Koji Arai Date: 2003-08-21T06:32:01+09:00 Subject: [ruby-dev:21215] Re: scanf and block parameter 新井です。 In message "[ruby-dev:21214] Re: scanf and block parameter" on 21 Aug 2003 02:35:06 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > |(1) 利用者は一引数の配列で受けるべき > |(2) scanf が配列展開してパラメータを渡すべき > > "%s %s"を指定したということは複数の値を期待していると思うん > です。それに対して一引数で受けると言うのも変な話ではないかと。 > というわけで、この場合 |a,b| か |*v| で受け取るべきなんじゃ > ないかなあと思います。 つまりは(2)ですね。やはりそうですよね。 > でも、後者の対応だと |v| のケースで [["a", "b"], "c"]になっ > ちゃいますね。私の観点からは自然だけど、互換性が問題になるか > なあ。 > > | 都合の良いことに配列展開の場合は一引数でも警告が出ないですね。 > > なんででしょう? 確かに都合が良いんですが。 ブロックに複数の(個数が変わる可能性がある)引数を指定したい場 合は yield(*ary) という逃げ道が(最悪でも)あるという点で都合が良いわけですが。 このことを知らないとたまたま一引数になるような(今回のような) 場合に気づきにくいバグが潜んでしまいます。これは現状ドキュメ ンテーションでカバーするしかないですね。 多重代入関連は仕様を整理しておかないといつまでも仕様が揺れ続 けそうですね。なんとかしなくちゃなあ。 > |おまけ、scanf は警告がうるさいようです。 > > これも含めてdblackに連絡しておきます。 > ありがとうございます。 -- 新井康司 (Koji Arai)