Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Lexical vs Dynamic Scope

Reply
Thread Tools

Lexical vs Dynamic Scope

 
 
Tim Morgan
Guest
Posts: n/a
 
      01-22-2011
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?
 
Reply With Quote
 
 
 
 
Josh Cheek
Guest
Posts: n/a
 
      01-22-2011
[Note: parts of this message were removed to make it a legal post.]

On Sat, Jan 22, 2011 at 12:20 AM, Tim Morgan <(E-Mail Removed)> 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 # => #<NameError: undefined local variable or method `x' for
main:Object>

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

g = lambda { x }
show_error g # => 1

 
Reply With Quote
 
 
 
 
Tim Morgan
Guest
Posts: n/a
 
      01-22-2011
On Jan 22, 1:12*am, Josh Cheek <(E-Mail Removed)> wrote:
> 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?


Ahhh. I see. Thanks!
 
Reply With Quote
 
Abinoam Jr.
Guest
Posts: n/a
 
      01-22-2011
On Sat, Jan 22, 2011 at 4:12 AM, Josh Cheek <(E-Mail Removed)> wrote:
> def show_error(f)
> =A0f.call
> rescue =3D> e
> =A0e
> end
>
> f =3D lambda { x }
> show_error f # =3D> #<NameError: undefined local variable or method `x' f=

or
> main:Object>
>
> x =3D 1
> show_error f # =3D> #<NameError: undefined local variable or method `x' f=

or
> main:Object>
>
> g =3D lambda { x }
> show_error g # =3D> 1



After doing the above, try this.

def x
"Anything returned by the (Receiver).x method"
end

show_error f # =3D> "Anything returned by the (Receiver).x method"
show_error g # =3D> 1

At compile time...
f =3D lambda { x }
x is not defined, and is thought to be a method!

Look...
http://www.ruby-forum.com/topic/724184

Abinoam Jr.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
FAQ 7.18 How can I access a dynamic variable while a similarly named lexical is in scope? PerlFAQ Server Perl Misc 0 03-27-2011 10:00 AM
FAQ 7.18 How can I access a dynamic variable while a similarly named lexical is in scope? PerlFAQ Server Perl Misc 0 01-21-2011 05:00 PM
Re: Lexical scope vs. dynamic scope Xah Lee Java 0 02-26-2009 10:08 AM
python: lexical or dynamic scope? globalrev Python 3 05-14-2008 01:28 PM
Lexical Scope Matt Knepley Python 3 10-30-2003 06:45 PM



Advertisments