--00163630f5f32c65a0049a6a175c
Content-Type: text/plain; charset=ISO-8859-1

On Sat, Jan 22, 2011 at 12:20 AM, Tim Morgan <tim / timmorgan.org> 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  
> f  roc.new { x }
> g  roc.new {
>  x  
>  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  ambda { x }
show_error f # #<NameError: undefined local variable or method `x' for
main:Object>

x  
show_error f # #<NameError: undefined local variable or method `x' for
main:Object>

g  ambda { x }
show_error g # 1

--00163630f5f32c65a0049a6a175c--