立石@JAISTです。

tadf / kt.rim.or.jpさん(05月13日00時):
tadf>>相談なんですが、値が必要になったときに勝手に計算してくれるようなオブジ
tadf>>クトがほしいなと思っていて (フレームっぽい?)、何かうまいやりかたはない
tadf>>ものかと考えているところです。再計算の必要がないということはよくあって、
tadf>>そのような場合には簡単には、
tadf>>
tadf>>  def Foo
tadf>>    def foo
tadf>>      def self.foo; @foo end
tadf>>      @foo = ちょっとばかり高くつく計算
tadf>>    end
tadf>>  end
tadf>>
tadf>>とでもしておけばよさそうですが  (もう少し工夫はできそう)、どうもコード
tadf>>がわかり難くなってしまうようです (あちこちにあると鬱陶しい)。もうちょっ
tadf>>とうまい方法ってないものでしょうか (より一般化して考えると、遅延評価と

def Fooじゃなくで class Foo ですよね?
(そういうことで以下書きます。)

;; ちょっと内容が把握しきれないので勝手なこと
;; 書いてるかもしれません。 すいません。m(_ _)m

ようするに一度fooを呼び出すとそのオブジェクトのfooの
メソッドが取り替えられるわけですよね?
特異メソッドを許しているrubyならではの技法ですが、
そのときの状況に応じてメソッドを選択したい場合など
に有効なのではないでしょうか?
fooがfooを再定義する以外にも

class Foo
  def foo
    print "foo\n"
    def self.foo2
      print "foo2\n"
    end
  end

  def foo2
    print "foo\n"
  end
end

とかして、メソッドの呼び出す順番によってその振舞
がことなるメソッドなんかもかけそうですよね。

しかし、ある計算を必要時に計算して以後はその値を
用いる1つのメソッドというであれば、

class Foo
  def initialize
    @used = false
    @value = 0
  end

  def foo
    if @used
      @value
    else
      @value = .......
    end
  end
end

のように再計算を必要とするか否かを判別するための
変数を導入するのが分かりやすくはないでしょうか?
もし、なにかの都合でふたたび再計算をしたいときは
@usedの値をfalseにセットすればいいだけです。

;; べつにrubyに特有の方法ではないですが、、、(^^;

----------------------------------------------
Name	Takaaki Tateishi
E-Mail 	ttate / jaist.ac.jp
	tateishi / pluto.dti.ne.jp
URL	http://www.pluto.dti.ne.jp/~tateishi/
Org	School of Information Science
	Japan Advanced Institute of Science and Technology (JAIST)