From: matz@... (Yukihiro Matsumoto) Date: 2000-10-28T23:46:22+09:00 Subject: [ruby-list:25677] Re: ブロックの返り値 まつもと ゆきひろです In message "[ruby-list:25670] Re: ブロックの返り値" on 00/10/28, Yukihiro Matsumoto writes: || break true みたいなのとか。 | |将来もなくて良いと思ってるわけではないですが、互換性、一貫性 |などなどの観点から安易に導入はしないと思います。どのような仕 |様と挙動が望ましいかについての議論は歓迎します。 そっけなく書いちゃいましたが、要するにこういうことです。 「手続きオブジェクトに値を与えて一気に終了したい」という要求 の存在は理解できます(値を与えないならbreakがあります)。手続 きオブジェクトはメソッドに似たところがありますから、その発想 は当然です。 しかし、それを解決する手段は(文法の変更まで視野にいれるなら)、 いくつでも考えられます。導入しないとは言いませんが、導入する なら最善のものを導入したいです。で、break trueのようなのは、 ひとめで挙動が分からないので避けたいと思ってます。 ちょっと考えただけで思い付いたのは (a) 手続きオブジェクトからreturnする専用の予約語の導入 (b) 手続きオブジェクトからreturnするメソッドの導入 (c) 手続きオブジェクト内でのreturnは外側のメソッドのreturn ではなく、手続きオブジェクトのreturnであるとする などがあります。ただ、どれにもやや問題があって、(a)で必要と される新予約語の導入はこのところずっと避けたいと思っているも のですし、あまり良い予約語も思い付きません。 (b)は将来もっとマシなコンパイラを作る際に障害になりそうな気 がします。以前breakなどがメソッドだったのに予約語に戻ったの はその辺を意識してのことですから。 (c)は現在の挙動とは変わってしまうことが気になります。互換性 というのもそうですが、returnを見たとき、どこからreturnするの か分からなくなるのではないだろうか、という不安が残ります。実 装そのものは、現在の実装ではそんなに大変ではありませんが、将 来もっとマシなコンパイラを作る際にはreturnに対するジャンプ先 が静的に決まらないことが問題になるかもしれません。 なかなか悩ましいでしょ? まつもと ゆきひろ /:|)