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? )
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? )
Eugen
Eugen C. wrote:
|num| inside block iterates through array’s items.
Last item in array is 5, thus |num| value will be the one from last
iteration of ‘each’ method.
It is better to rename |num| to something else, |item| for example.Eugen
I’ve tried it in my machine and the output is 1…
C:\Users\Guglielmo>ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]
C:\Users\Guglielmo>ruby
array = [1,2,3,4,5]
x = 1
num = 1
array.each { |num| puts num*20 + x }
puts num
^D
21
41
61
81
101
1
Eugen C. wrote:
Look here
http://svn.ruby-lang.org/repos/ruby/tags/v1_9_1_0/NEWSSince 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.
It means in ruby v 1.8.6 block variable and local variable are the same
, and not difference between them ?
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Am 03.08.2010 11:02, schrieb Eugen C.:
Look here
http://svn.ruby-lang.org/repos/ruby/tags/v1_9_1_0/NEWSSince 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@ikarus:~$ ruby -w
array = [1,2,3,4,5]
x = 1
num = 1
array.each{|num| puts num*20 + x}
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-----
Eugen C. wrote:Look here http://svn.ruby-lang.org/repos/ruby/tags/v1_9_1_0/NEWSSince 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.
It means in ruby v 1.8.6 block variable and local variable are the same , and not difference between them ?
Hi –
On Tue, 3 Aug 2010, Eugen C. 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
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.
Amir E. 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
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs