En r?ponse ? Warren Seltzer : > I see this notation, which appears to be undefined outside of hash literals, all over the > place. What does it do? The online version of the pickaxe book doesn't have it. > > Here's a rails example: > > def do_something > redirect_to :action => "elsewhere" > render :action => "overthere" # raises DoubleRenderError > end > Basically, those are hash literals too. They look a bit like keyword arguments because of the syntactic sugar that Ruby allows: - If the only argument of a method is a hash, you can lose the {}: "mymethod({:foo => "bar"})" can be written "mymethod(:foo => "bar")" - Parentheses around the parameter list of a method are optional: "mymethod(foo)" can be written "mymethod foo" Add both rules, and you get exactly the syntax of your example. "redirect_to" and "render" are actually just methods that take hash arguments ('redirect_to :action => "elsewhere"' is just another way to write 'redirect_to({:action => "elsewhere"})' in a clearer and key-hit saving way ;) ), and the two syntactic sugar rules allows one to use them in a keyword+keyword argument fashion. Neat isn't it? :) As for why the online Pickaxe doesn't have it, it may be because the hash syntactic sugar is only present since Ruby 1.8, while the online Pickaxe covers Ruby 1.6. But I could be wrong. -- Christophe Grandsire. http://rainbow.conlang.free.fr You need a straight mind to invent a twisted conlang.