立石@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)