Scope issue of variable in iterator

mkhan@mkhan:~$ irb
irb(main):001:0> batman = ‘robin’
=> “robin”
irb(main):002:0> [ ‘cat’, ‘dog’, ‘horse’, ‘chicken’ ].each { |batman|
puts batman }
cat
dog
horse
chicken
=> [“cat”, “dog”, “horse”, “chicken”]
irb(main):003:0> puts “Now you might think this would say ‘robin’, but
it says: #{batman}”
Now you might think this would say ‘robin’, but it says: chicken
=> nil
irb(main):004:0>


Mohammad K. | Software Engineer
Lextranet | 107 Union Wharf | Boston, MA 02109
http://www.lextranet.com
(617) 227-4469 Extension 218

Smart Tools. Smart Team. Smart Choice.

THE INFORMATION IN THIS MESSAGE IS INTENDED ONLY FOR THE PERSONAL AND
CONFIDENTIAL USE OF THE DESIGNATED RECIPIENTS NAMED ABOVE AND MAY
CONTAIN LEGALLY PRIVILEGED INFORMATION. If the reader of this message
is not the intended recipient or an agent responsible for delivering
it to the intended recipient, you are hereby notified that you have
received this document in error, and that any review, dissemination,
distribution or copying of this message is strictly prohibited. If
you have received this communication in error, please notify us
immediately by telephone at 617-227-4469 Ext. 200. Thank you.

On 3/22/06, Mohammad K. [email protected] wrote:

irb(main):003:0> puts “Now you might think this would say ‘robin’, but
it says: #{batman}”
Now you might think this would say ‘robin’, but it says: chicken
=> nil

It’s true that blocks introduce a new scope.
However, if they use variables that are in scope outside the block,
they don’t shadow those variables, they use them.

Mark V. [email protected] wrote:

=> [“cat”, “dog”, “horse”, “chicken”]
irb(main):003:0> puts “Now you might think this would say ‘robin’,
but it says: #{batman}”
Now you might think this would say ‘robin’, but it says: chicken
=> nil

It’s true that blocks introduce a new scope.
However, if they use variables that are in scope outside the block,
they don’t shadow those variables, they use them.

… like in other programming languages as well.

robert