On 6/3/07, Nobuyoshi Nakada <nobu / ruby-lang.org> wrote: > Hi, > > At Mon, 4 Jun 2007 13:25:50 +0900, > david karapetyan wrote in [ruby-talk:254219]: > > thanks. i didn't realize i had to provide the block as well when i was > > creating the closure. i was hoping for a closure that could take a different > > block every time. i wanted fib to be a function that had access to a and b > > and every call to fib would require a block. as it is fib has its block > > fixed at creation time. do you know of a way of doing what i wanted to do > > originally? > > You need ruby 1.9. Block passing to a block isn't supported in > 1.8. > > def fibber > a = 1 > b = 1 > lambda do |&block| > block.call(a) > a,b = a+b,a > end > end > > irb(main):010:0> fib = fibber > => #<Proc:b7ba2338@(irb):6> > irb(main):011:0> 10.times {fib.call {|x|p x}} > 1 > 2 > 3 > 5 > 8 > 13 > 21 > 34 > 55 > 89 > => 10 > > -- > Nobu Nakada > > I thought I read somewhere that 1.9 wasn't going to support closures. So it apparently does then? -- -fREW