From: Josh Cheek Date: 2011-01-22T16:12:36+09:00 Subject: Re: Lexical vs Dynamic Scope --00163630f5f32c65a0049a6a175c Content-Type: text/plain; charset=ISO-8859-1 On Sat, Jan 22, 2011 at 12:20 AM, Tim Morgan wrote: > Forgive this very basic question, but Googling has not answered my > question, and I'm sure it's a simple one for the gurus here. > > I've been using Ruby for years, and I've always had questions about > how it handles scope. Usually Ruby just does what I would expect it > to. > > In reading about lexical vs. dynamic scope on various places on the > Web, I read that Ruby has lexical (static) scope. But I cannot prove > it to myself with code. For example, the following produces one (1) -- > not zero (0) as I would expect it to if Ruby was truly statically > scoped: > > x = 0 > f = Proc.new { x } > g = Proc.new { > x = 1 > f.call > } > puts g.call > # => 1 > > (I purposely used Procs instead of regular methods here since Ruby > methods cannot see the top-level "x" variable at all, which is a whole > other issue.) > > Is Ruby really dynamically scoped? > > The x in g is the same as the x outside of g. There is only one single x in your program, so this doesn't show much. Maybe this instead? def show_error(f) f.call rescue => e e end f = lambda { x } show_error f # => # x = 1 show_error f # => # g = lambda { x } show_error g # => 1 --00163630f5f32c65a0049a6a175c--