豊福です。 まつもとさん Date: Mon, 5 Feb 96 12:14:39 JST [ruby-list:126] > rubyでは「i++」とい > う文法はサポートしていません. ... > * ここで「i++」を実装するために変数をオブジェクト化するとい > う選択肢も考えられないことはないが,たかが「i++」を実装す > るだけのためにそれだけのことをするのは大げさな気がするし, > 言語の他の部分への影響も大きそうだ. この「変数のオブジェクト化」と同じかもしれませんが、 「変数、配列へオブジェクトが代入されるとき(メソッドコールで 仮引数変数に渡されるときも含む)は下のような皮に包まれて代入 され、逆に皮に包まれているものが eval されるときは皮が剥がれて 中のオブジェクトが現れる」 という解釈は可能でしょうか。(気に入る入らないはひとまず置いと いて矛盾や困ることが起きないかという意味で) class XXX def @++ @obj = @obj.succ # ここの '=' は従来の意味の代入 end 上記の系統以外のメソッド(__id__ なども含め)は すべて @obj に deligate される。 end ++系以外で「皮」の存在を観測できるインターフェースは提供 しない。 > * しかも,rubyの文法に「i++」を導入しても,結局はメソッド呼 > 出になるわけで,「i+=1」に比べて,それほど実行が高速にな > るわけではないと容易に予想される(多分かえって遅くなる). > > * C++では整数型の変数に`++'が適用されると,変数の値を1増や > し,それ以外の型の変数に`++'が適用されるとoperator ++を呼 > び出すことになっている.しかし,これは1)変数に型の無い > rubyでは静的に実現できない,2)実行時に動的に判別したとし > ても,実行速度が高速になるわけでもなく,オブジェクト指向 > 的な意味づけもはっきりしない,という理由でrubyでは採用し > なかった. 組み込みのメソッドの再定義を監視していれば最適化の余地がある のではないかと考えているのですが無理でしょうか。++ だけでなく 四則演算系、配列要素参照/代入も。 --- 豊福 toyofuku / juice.or.jp