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 <mike / stok.ca>
http://www.stok.ca/~mike/

The "`Stok' disclaimers" apply.