ふなばです。 >|ちなみに、 僕は、Ruby がやるにしても、必ずしもそのための文法をとくに誂 >|えなくてもよさそうなものだ、と思っているんですが、どうなんでしょうか。 >|メソッド定義はそれとして、ふるまいについて指示する、というようなことっ >|てできそうじゃないですか (だって自由度が高いんですもの :-)。対象となる >|メソッドを間接呼び出して、値を得たら再びメソッドを定義しなおすメソッド >|を Module に用意するってのはダメなのかなあ。 > >ダメじゃないです.が,仕様をもう少し詰めるとrubyレベルで出来 >そうな気もします.もっともどの時点でもとのメソッドが定義され >ているかって係わってくるんでちょっとややこしいですが. 前田さんのコードとまともとさんのヒントを頼りに、ためしに、とても簡単な のを書いてみました (eval つかっちゃいました)。 # once.rb: Written by Tadayoshi Funaba 1998 # $Id: once.rb,v 1.1 1998/07/03 16:45:31 tadf Exp tadf $ class Module def once(id) name = id.id2name module_eval <<__ONCE__ alias_method :__#{id}__, :#{name} def #{name}(*args, &block) def self.#{name}(*args, &block); @__#{id}__ end @__#{id}__ = __#{id}__(*args, &block) end __ONCE__ end private :once end #-- class Foo def foo ... end once :foo end てなふうにします。風呂あがりにちょろっと書いたんであやしい。 --Tadayoshi Funaba