From: ts Date: 2000-10-23T23:40:06+09:00 Subject: [ruby-talk:5791] Re: local variables (nested, in-block, parameters, etc.) >>>>> "G" == Guy N Hurst writes: The scope of a variable is determined at *compile time* G> x=9; local variable G> [1,2,3].each{|x~| break if x==2} dynamic variable G> p x #-> 9 G> p {}::x #-> 2 sorry you have lost the dynamic variable. G> Alternatively, I suppose the same tilde thing could be used for that, too. G> x=9; G> [1,2,3].each{|x~| break if x==2} G> p x #-> 9 G> p x~ #-> 2 in this case initialize y (rather than x~) before the each. G> {|x,y| a=x; ....} # in-block only Something like this : pigeon% cat b.rb #!./ruby a = 1 b = 2 p "#{a} -- #{b}" [[3, 4]].each do |b| p "#{a} -- #{b}" end p "#{a} -- #{b}" pigeon% b.rb "1 -- 2" "3 -- 4" "1 -- 4" pigeon% G> p {}::a # but still accessible outside ;-) You can't do this I think. G> I don't think the tilde is so bad, considering its capability... You have not resolved the proposition (2), i.e. a *real* 'let' which create a block (without a NODE_ITER). My proposition do() is the equivalent of 'let' With [[3, 4]].each do |b| p "#{a} -- #{b}" end *and* do a = a + 2 end You have the proposition (1) *and* the proposition (2) I've still not understood the proposition (3) :-( proc = lambda(a, b) end Is this a NODE_ITER or NODE_DEFN (with NODE_ARGS and NODE_SCOPE) ? Guy Decoux