From: Shin'ya Adzumi Date: 2002-07-25T12:44:07+09:00 Subject: [ruby-dev:17816] Re: self in block あづみです。 nobu.nakada@nifty.ne.jp wrote: > # 要1.7 > > class Sequence > def initialize(list=[], *parameter) > @list = list > @para = parameter > class << self > define_method(:lambda, proc) > end > end > > def [](n) > @list[n] ||= lambda(n, *@para) > end > end defined_method を使うならこういう書き方もできますよね。 [ruby-dev:17806] を書き換えると、 class Sequence def initialize(list=[], *parameter) @list = list @para = parameter end def [](n) @list[n] ||= lambda(n, *@para) end def lambda(*arg) end end class << Prime = Sequence::new([2,3]) def each i=0 loop do yield(self[i]) i+=1 end end def find (r=nil;each{|x| if yield(x) then r=x;break;end};r) end def lambda(n,*arg) m = self[n-1]+2 m += 2 while find{|k| break if k*k > m; m % k == 0} m end end m = 10 Prime.each{|prime| break if prime > m ;p prime} # => 2,3,5,7 # 最初 Prime = class << Sequence::new([2,3]) と書いて nil に # なってしまってがびーんだったり^^ まあ、採用する気にはなれません、と言われそうな気はしますが。 安積伸弥 adzumi@denpa.org