From: Kazuhiro HIWADA Date: 1999-02-11T02:51:32+09:00 Subject: [ruby-dev:5000] nested method (Re: module Precision) ひわだです。 From: keiju@Rational.Com (石塚圭樹 ) Subject: [ruby-dev:4733] Re: module Precision Date: Fri, 5 Feb 1999 16:43:34 +0900 > けいじゅ@日本ラショナルソフトウェアです. > >|話し変わりますが, defの中でdefってできるようになったんです? 特異メソッ > >|ド定義だけ? > > > >特異メソッドだけです.これは最初からできます. 以前話の出た nested method についてですが、結論を書かないままに消えて しまったので、一応状況を説明しておきます。 1. まず、局所関数のように振る舞う nested method がほしいという要求があ りました。([ruby-dev:3681] etc.) 2. インタプリタに大きな変更を加えずに実装できるのではないか?、と僕が 主張しました([ruby-dev:3690] etc.) 3. まつもとさん曰く([ruby-dev:3716]) > def foo > eval < def bar > ... > end > EOS > end > > ってコードの意味が変わってしまうのが難点です. とのことでした。 という状況だったのですが、僕があきらめてしまったので(かどうかはわかり ませんが)立ち消えになってしまっています。 3. については確に難点ですが、互換性が損なわれる種の問題ではなく、解釈 の仕方さえ変えれば(ちょっと苦しいですが)、解決できる問題です。 では何故あきらめたのか?、です。僕は 2. で、局所メソッドに "foo$bar".intern のようなドメインつきの ID を持たせることで実装可能だ と主張していました。しかし、僕の考えていた実装では alias foo_orig foo のようにエイリアスを張り foo$bar を再定義すると破綻してしまうという問 題がありました。解決不可能ということもないでしょうが「Proc, Proc#call と同等の機能の実現のためにこのリスクを負うべきか?」迷った挙げ句、あき らめました。 というわけで、nested method を実現するためには、 * 3. の問題を解決する reasonable な解釈。 * alias 等でも問題のでない、現実的な実装。 が必要だろう、と思っています。 #結局のところは需要次第かとおもいますが…。 -- 檜田 和浩 ( hiwada@kuee.kyoto-u.ac.jp )