From: Clemens Hintze Date: 2000-02-09T15:50:35+01:00 Subject: [ruby-talk:01275] Re: Draft of the updated Ruby FAQ 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