From: Mike Stok Date: 2006-03-01T11:19:34+09:00 Subject: Re: What am I missing with this closure example? On 28-Feb-06, at 8:58 PM, Sam Kong wrote: > Hello! > > Since my last question about > closure(http://groups.google.com/group/comp.lang.ruby/browse_frm/ > thread/0d7e258107e1683e/12e182a6ff493232?hl=en#12e182a6ff493232) > I am testing my understanding making some examples. > > Here's some code: > > def f name > x = 0 > > case name > when "one" > lambda {x += 1; puts x} > when "two" > lambda {puts x} > end > end > > one = f "one" > two = f "two" > > one.call > two.call > one.call > two.call > > Result: > > 1 > 0 > 2 > 0 > > > I expected the following. > 1 > 1 > 2 > 2 > > > I thought that x is shared between one and two but they don't seem to. > Or am I missing something? Each time you call f you get a different x, so the lambda's x are bound to different variables. Does this do what you expect: def f x = 0 [lambda {x += 1; puts x}, lambda {puts x}] end one, two = f one.call two.call one.call two.call Mike -- Mike Stok http://www.stok.ca/~mike/ The "`Stok' disclaimers" apply.