On Thu, 19 Oct 2000, ts wrote: > >>>>> "H" == Hugh Sasse Staff Elec Eng <hgs / dmu.ac.uk> writes: > > H> But the manual page states they are the same: "for is the syntax sugar > H> for:" etc. That was my point. If they are not equivalent, but they are > H> so near that the author of the manual could confuse the two, > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > I don't think that the author of the manual can confuse the two :-) Then 'for' simply isn't syntactic sugar for the braces or for the do...end. It does a similar job, but does it differently. The author may not be confused, but confuses the issue for the reader by putting things like this. No disrespect intended: creating clear documentation is non-trivial! > > H> if 'do' and 'end' do not introduce new scope, whereas the braces do. But > H> actually trying this: > > 'do' and 'end' introduce new scope, except when used with 'while', > 'for', ... :-) Oh! These are treated differently because the do word is optional there. OK. I think I've got there. I better retract that patch then! I would suggest a new patch replacing my earlier one: --- syntax.html.orig Thu Jun 22 16:18:36 2000 +++ syntax.html Wed Oct 18 17:59:54 2000 @@ -1555,8 +1555,14 @@ </P> <PRE> - (expr).each `{' `|' lhs..`|' expr.. `}' + lhs = nil + (expr).each `do' `|' lhs..`|' expr.. `end' </PRE> +<P> +but without creating local scope for <CODE><VAR>expr</VAR></CODE>. +Note: <CODE><VAR>lhs</VAR></CODE> will be defined when the +<CODE>for</CODE> loop finishes. +</P> <H4><A NAME="yield"><code>yield</code></A></H4> > > H> which seems to be the same as braces to me. Hmmm. I thought I > H> understood the difference between braces and do...end. > > There is a difference between 1.4 and 1.6 > > pigeon% cat b.rb > #!/usr/bin/ruby > def b > yield 14 > end > def foobar(a, b) > p "#{a} -- #{b}" > end > a = 12 > foobar a, b {|i| i} > foobar a, b do |i| > i > end > pigeon% > > pigeon% b.rb > "12 -- 14" > "12 -- 14" > pigeon% > > pigeon% ./ruby b.rb > "12 -- 14" > b.rb:3:in `b': yield called out of iterator (LocalJumpError) > from b.rb:10 > pigeon% > > pigeon% ./ruby -v > ruby 1.4.6 (2000-08-16) [i686-linux] > pigeon% > So that rule about precedence has gone in 1.6? > > Guy Decoux > > Hugh hgs / dmu.ac.uk