Hi,
In message "[ruby-talk:00877] local / dynamic variables"
on 99/10/29, ts <decoux / moulon.inra.fr> writes:
> This is probably a stupid question, but why in a block a variable is not
> always dynamic when this variable is defined between | | ?
>
> i.e. :
>
> a = [1]; i = 0; a.each {|i| p i } # i is a local variable in the block
> # at end it erase the previous value of i
> a = [1]; a.each {|i| p i } # i is a dynamic variable
As you see, in the formar case, |i| is shared with the outer scope.
A significant use of this feature can be given:
a = [4,5,6,3]
sum = 0
a.each{|i| sum += i}
p sum
In the book ``Object oriented scripting language Ruby'' (in Japanese),
scopes of local variables are illustrated as follows:
foo = 25 #<-- scope of foo
#
class Foo #
bar = 55 # #<-- scope of bar
# #
def baz(local1) # #
local2 = 88 # # #<-- scope of local1,local2
# # #
loop do # # #
local3 = 99 # # # #<-- scope of local3
..... # # # #
# # # #
end # # #
# # #
end # #
..... # #
end #
..... #
See also a related thread:
http://blade.nagaokaut.ac.jp/ruby/ruby-talk/thr200-403.html#root_351
p.s. Your question is not stupid but good :-)
-- gotoken