From: matz@... (Yukihiro Matsumoto) Date: 1996-02-05T12:14:39+09:00 Subject: [ruby-list:126] Re: i++ ???? まつもと ゆきひろ@トヨタケーラムです. In message "[ruby-list:125] i++ ????" on 96/02/05, P nakawtse writes: |中渡@NTTです. | |----------- |まつもと ゆきひろ@トヨタケーラムです. |どうも私の説明が悪いんでしょうね. |----------- | 謎が深まってしまいました.#寝た子をおこすな?(^^). いいですよ,納得するまで説明させてください. |Cのレベルでは「変数iの値に1を加える」という変数に対する操作 |ですよね. |--------------- | 値に対する操作って. | 1++ -> 2 | ということですか? そうですね.1オブジェクトに++メッセージを送ると2になるという のが値に対する操作としての「++」というつもりでした.ただし, これは明らかにおかしいのでrubyでもできません.つまり,rubyの メソッドは基本的に値に対する操作だが,++は値に対する操作とし て実現するのは無理があるという意味です. | ちなみに | print 1++; −> -:1: syntax error | でした??? えーと,上で説明したような理由もあって,rubyでは「i++」とい う文法はサポートしていません.だからシンタックスエラーになり ます. なぜサポートしていないかもうすこし詳しくいうと # 繰り返しになりますが * 「i++」という式をオブジェクト指向的にとらえるとするならば, 「変数オブジェクトiに++というメッセージを送って格納されて いる値を『次の』値にする」という動作であるべきだと(松本は) 考える. * しかし,rubyでは変数はオブジェクトではなく,変数に対する 操作(参照と代入)は言語組込みの機能である. * ここで「i++」を実装するために変数をオブジェクト化するとい う選択肢も考えられないことはないが,たかが「i++」を実装す るだけのためにそれだけのことをするのは大げさな気がするし, 言語の他の部分への影響も大きそうだ. * しかも,rubyの文法に「i++」を導入しても,結局はメソッド呼 出になるわけで,「i+=1」に比べて,それほど実行が高速にな るわけではないと容易に予想される(多分かえって遅くなる). * C++では整数型の変数に`++'が適用されると,変数の値を1増や し,それ以外の型の変数に`++'が適用されるとoperator ++を呼 び出すことになっている.しかし,これは1)変数に型の無い rubyでは静的に実現できない,2)実行時に動的に判別したとし ても,実行速度が高速になるわけでもなく,オブジェクト指向 的な意味づけもはっきりしない,という理由でrubyでは採用し なかった. ということです. | やっぱり動作を調べないとダメなのか??? | #シンタックスを縮小して動かせます? parse.yに手をいれればもちろん可能ですけど,そうとうyaccに詳 しくないと止めた方が良いと思います. |#このMLはfmlですか? そうです.過去のメイルも参照できるはずです.