Symbols are puzzling me and not only symbols

Dear all, I've got two burning questions. Both regard the manipulation of the params hash. Imagine: 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 expected.

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 5 => nil irb(main):003:0> puts(3) + 2 3 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.

Also:

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

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 omission.

David

Aha, but why does that scheme break down? Knowing that would prevent me from running future problems. The class documentation()http:// api.rubyonrails.org/classes/HashWithIndifferentAccess.html) does not bring me very far either. Especially the line: [quote] this class has dubious semantics and we only have it so that people can write params[:key] instead of params['key'] [/quote] 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 it.

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