Symbols are puzzling me and not only symbols

Dear all,
I've got two burning questions. Both regard the manipulation of the
params hash.
params = {"commit"=>"Add comment", "comment"=>{"message"=>"foo",
"name"=>"bar", "answer"=>"2", "email"=>"foo@bar"}}

So the params hash has two keys, one('commit') points to a string the
other('comment') to an other hash.
Normally I can do something like; params[:id] or whatever, now if I do
that, params[:commit] it returns nil! Why?? params['commit'] works as

On to the second question, when I have a large array or hash I used
to(In Java/PHP etc) split them up in several lines. For example:
    tmp = {:message => 'tmp' ,:name => 'tmp' ,:email => 'tmp'}

Would become:
    tmp = { :message => 'tmp'
               ,:name => 'tmp'
               ,:email => 'tmp'

I find this eaasier to read and easier to check for comma related
errors. However Ruby fails to recognise this, failing with the error:
syntax error, unexpected ',', expecting '}'
          ,:name => 'tmp'

Ruby is better kidding me. The interpreter doesn't handle whitespace??
Any comments on what I am doing wrong or why not ignoring whitespace
is a good idea, I'd love to hear.

With kind regads

Hi --

Yeah, ruby doesn't care about spaces, but it does care about new lines.
Which is good, at least it doesn't rely on semi-colons.

There are some cases where spaces matter; for example:

irb(main):002:0> puts (3) + 2
=> nil
irb(main):003:0> puts(3) + 2
NoMethodError: undefined method `+' for nil:NilClass

In the second one, it evaluated puts(3) (including actually puts'ing
3) and then tries to add 2 to it, which fails.


irb(main):004:0> puts puts (3)
(irb):4: warning: don't put space before argument parentheses

which does the same as puts puts(3) but gives you that warning.

for a multiline declaration with clarity of commas

tmp = {
   :message => 'tmp' ,
   :name => 'tmp' ,
   :email => 'tmp'

At the very great risk of sounding curmudgeonly, could I put in a
heartfelt plea for people not to do that? It looks bizarre, and seems
to invite scrutiny in case there's been some kind of mistake or


Aha, but why does that scheme break down? Knowing that would prevent
me from running future problems. The class documentation()http:// does not
bring me very far either. Especially the line:
this class has dubious semantics and we only have it so that people
can write params[:key] instead of params['key']
does not inspire confidence.

Hmmm, alright. I still don't understand why the parser does not just
run until it encounters an other curly brace (}). But I can live with

Interesing example! I should use that in class. Thanks.