Hello Dave,

I am reading your newest FAQ! It becomes more and more perfect, IMHO
;-) But unfortunately I have to disturb you again ... please be
patient with me :-}

2.3 When does a local variable become accessible?
    A local variable becomes accessible after the first assignment
    statement to that variable appears in the source (which is not the
    same as the first time an assignment statement is executed).

Your explaination is ok, but, IMHO, I feel we could describe it more
explicite. 

We should explain the user, that the compiler has to decide on compile
time, whether a mentioned symbol means variable access or method call
(performance and architectural reasons; variable access is *very*
difficult from method invocation).

On runtime the interpreter will execute whatever was compiled
(variable access or method invocation). This can be very surprising
and could result in a difficult to locate bug, probably! 

If you consider the example below you will find, that there is no
error message printed by ruby. But the result will be very
surprising, I guess ;-)

   def a
      print "Function 'a' called!\n"
      99
   end

   for i in 1..2
     if i == 2
       print "a=", a, "\n"
     else
       a = 1
       print "a=", a, "\n"
     end
   end 

What do you think?

3.3 How is a block used in an iterator?

Nice, but could you explicite explain, that blocks are not consumed by
'Proc.new', 'lambda' and 'proc'? So the last example would become more
clear. If not, I could ask myself with what block does 'proc' operate
with? Because the block was already used by 'Proc.new'!

4.1 What does :var mean?

Again, I cannot see the reason why it is important for the user to
know, that the ':var' form will create local symbols.

Your example would also work with:

   NORTH = "NORTH".intern
   SOUTH = "SOUTH".intern
   EAST  = "EAST".intern
   WEST  = "WEST".intern

Ugly ... but possible. For me (the user), I could think of ':var' as
intern aliasing of '"var".intern'. I do not need the knowledge, that
':var' will create a local symbol. Please look the following example:

   print "Before catch\n"
   catch("WWW".intern) do
      print "Before throw\n"
      throw "WWW".intern
      print "After throw\n"
   end
   print "After catch\n"

Do you see any reason I should know this special internal thing? 

4.2 How can I access the value of a symbol?

If you ask this question, would it make sense also to ask: How can I
access the method behind a symbol?


Regards,
\cle