Hi,

In message "[ruby-talk:5483] Re: Some newbye question"
    on 00/10/13, Davide Marchignoli <marchign / di.unipi.it> writes:

|>    def example
|>      a = 99
|>      return proc { |n| n + a }
|>    end
|> 
|>    x = example
|>    x.call(2)    # => 101

|My question was about variable n, the block does not necessarly introduces
|a fresh variable, instead it (possibly) binds it to an already existing
|variable. IMHO this treatement of variables occurring as argument of
|blocks is unrelated to the creation of closures.

It is necessary.  For example

  fact = proc{|n|
    n == 0 ? 1 : fact.call(n-1)*n
  }
  p fact.call(4)

would return 0 if the block does not introduce a new scope.
But I still want to remove the stumble stone like:

  ary.each do |x|
    if cond?(x)
      break
    end
  end
  found = x  # error; x is not defined here.

in the future, probably Ruby 2.0/3.0 or so.

							matz.