[#3536] Re: [ruby-list:10256] Re: for が修飾子だったら — Junichi Kurokawa <jun@...>

Reply-To: ruby-devとしました。

15 messages 1998/10/22

[ruby-dev:3549] Re: [ruby-list:10256] Re: for が修飾子だったら

From: matz@... (Yukihiro Matsumoto)
Date: 1998-10-27 06:48:06 UTC
List: ruby-dev #3549
まつもと ゆきひろです

In message "[ruby-dev:3548] Re: [ruby-list:10256] Re: for     が修飾子だったら"
    on 98/10/27, Junichi Kurokawa <jun@mew.gol.com> writes:

|sortは返り値を期待して呼ぶものですが。
|
|eachには意味のある返り値がありません。副作用を期待して呼ぶものです。で、
|その副作用を与えるブロックを省略したeach;に何の意味があるの?と聞いたと
|ころ、松本さんは「each;は引数である文を省略した呼び出しであり正しい」と
|繰り返すばかりで、これでは議論はかみ合いません。

Rubyの構文としてはeachというのは「値を返すかも知れないし,返
さないかも知れない」単なるメソッドであり,コンパイラはその情
報を知りえないし,sortという「返り値を期待しているメソッド」
と構文上なんの区別もしていないということがどうして伝わらない
のでしょうか?

確かに現状の組込みライブラリのeachは意味のある返り値がないで
すが,それはライブラリ側の決め事で言語(文法)は関知していませ
ん.これがPerlであればeachのようなものも予約語であり,構文要
素なので個別の扱いはむしろ当然でしょうが,Rubyの場合,これら
は構文要素ではありません.単なる普通のメソッド呼び出しです.

ちなみに,内部でブロックを全く使わないことが分かっているメソッ
ドに対してブロックを与えても,なんのエラーにもならず単に無視
されます.これについては不満を感じる人がいるのも理解できない
でもないのですが,妥協をお願いしています.

|いずれにせよ「rubyはcontext-freeな処理系では無いのではないか」という当初
|からの疑問に対する答えは「rubyはcontext-freeな処理系では無い」であること
|が判明したので、これを結論とします。

「context-freeな処理系ではないのではないか」という質問を受け
た覚えはないのですが,その質問に対する答えは「rubyの文法は
context-freeではない」です.ただし,それは今回話題になってい
るブロックのせいではありません.

申し訳ないですが,黒川さんの問いかけは私には真意が掴みかねま
す.もう少しストレートに質問して頂けると意図を推測する必要が
なく,答えやすいのですが.

                                まつもと ゆきひろ /:|)

In This Thread