From: Quintus on
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am 03.08.2010 11:02, schrieb Eugen Ciur:
> Look here
> http://svn.ruby-lang.org/repos/ruby/tags/v1_9_1_0/NEWS
>
> Since v 1.9.1 block arguments (in our case |num|) are always local,
> i.e in 'each' block |num| will not conflict
> with outer 'num' variable. In your machine you have 1.9.1 version.
>

Additionally, if you run ruby with warnings enabled, you get notified:

marvin(a)ikarus:~$ ruby -w
array = [1,2,3,4,5]
x = 1
num = 1
array.each{|num| puts num*20 + x}
- -:4: warning: shadowing outer local variable - num
puts num
21
41
61
81
101
1
marvin(a)ikarus:~$ ruby -v
ruby 1.9.1p429 (2010-07-02 revision 28523) [x86_64-linux]
marvin(a)ikarus:~$

Marvin
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkxX5XwACgkQDYShvwAbcNksbQCfaq3nuXGd4OZNB3c1RGYeA2xS
2o0AoIfKBAfM8UttAfamaFxW9jwwJkOr
=orQI
-----END PGP SIGNATURE-----

From: David A. Black on
Hi --

On Tue, 3 Aug 2010, Eugen Ciur wrote:

> Not exactly. Blocks defines a new variable scope, however blocks have access
> to variables defined outside block scope.
> Thus, a variable defined outside block will be modified inside block (for
> ruby 1.8.6).

In Ruby 1.9.1 too, for non-parameter variables -- for example:

a = nil
10.times {|i| a = i }
p a # 9


David

--
David A. Black, Senior Developer, Cyrus Innovation Inc.

The Ruby training with Black/Brown/McAnally
Compleat Philadelphia, PA, October 1-2, 2010
Rubyist http://www.compleatrubyist.com

From: Barchil Barchil on
Amir Ebrahimifard wrote:
> Hi
> What does happen for "num" variable in this code :
>
> array = [1,2,3,4,5]
> x = 1
> num = 1
> array.each { |num| puts num*20 + x }
>
> ( after this code when I type "puts num , ruby return 5 ! why? )

I tried your code i added this at the end

puts(num)

i have this :

21
41
61
81
101
1

and i think its a correct response because we have two variables one
have the scope in the block who have at the end of iteration 5
the other variable have the value 1 witch is displayed

sorry for my bad English :(
--
Posted via http://www.ruby-forum.com/.