Just to add to a very good response to the original post... <gwtmp01 / mac.com> wrote in message news:59496518-3925-4E74-9B6E-B45A8C3B7E02 / mac.com... > > On Oct 4, 2006, at 3:39 PM, Kevin Olemoh wrote: > >> Hello I have been using ruby off and on for a few months and I have >> been having a great time with the language but a few things bother me >> about the syntax of the language itself. The two glaring issues are: >> >> 1. The syntax errors generated by the following code: >> >> a.each >> do >> #stuff >> end >> >> for reasons I do not understand ruby demands that, that line be written >> as: >> a.each do >> #stuff >> end > > Blocks are part of the syntax of a method call (do/end or {}) > Blocks are optional. > Newlines terminate statements. > > The net result of those three things is that: > > a.each > > is considered a syntactically valid and complete statement. Leaving > Ruby to try > to interpret > > do > #stuff > end The following code: a.each do #stuff end ...is the equivalent of to: a.each; # note the optional statement terminator... do #stuff end > as the next statement, which fails. If Ruby executes 'a.each' (without > the > block) you'll get a runtime exception. It is correct syntax, but 'each' > insists > that it be called with a block. > > You could of course give a hint to the parser that you want to continue > the statement: > > a.each \ > do > #stuff > end > > but escaping the newline in this case doesn't improve the readability > (IMHO). > >> 2. What is with the elseif syntax specifically why is it elsif instead >> of elseif when ruby already has an else keyword? I can't count how >> many times I got errors because I decided to type elseif instead of >> elsif while doing something with an if statement. I can name at least >> two popular languages that use elseif not to mention the fact that if >> English is your first language you will probably spell out else without >> even realizing it since that is the correct way to spell the word in >> English. Yes I know its a minor thing but if no one voices their >> gripes how do people know something might need a bit of tweaking? :) > > I doubt a survey of languages would come up with any sort of consistency > for the keyword in this case, so you are basically asking why doesn't > Ruby use the same syntax for the particular languages that you are > familiar with, which seems like a somewhat arbitrary expectation and one > that could never be satisfied for everyone. > > I'm not a parsing/grammar expert, but I also suspect there is some > benefit to keywords not being prefixes of other keywords so that 'else' > and 'elseif' create more parsing issues than 'else' and 'elsif'. I'm > sure someone else could elaborate on that thought. In fact, Ruby has deep Perl roots, which is why so much of its syntax is so Perl-like (just note its regular expressions). Perl uses "elsif" and, thus, so does Ruby. Personally, I don't like it either but what can you do...