On Mon, Mar 18, 2013 at 8:33 PM, Pritam Dey <lists / ruby-forum.com> wrote:

> I was trying to call a method as below:
>
> $array = []
> array_1 = %w(tuna salmon herring)
> array_2 = %w(crow owl eagle dove)
>
> def parser (*argument)
>   argument.each do |item|
>     $array << item
>   end
> end
>
> parser (array_1,array_2)
> $array.flatten!
> puts $array
>
> Error:
> =====
> D:/Rubyscript/My ruby learning days/Scripts/test.rb:13: syntax error, u
> nexpected ',', expecting ')'
> parser (array_1,array_2) # taking multiple arguments generates error
>                 ^
>
> No I fixed the code by removing the space in the method call of parser
> as below:
>
> $array = []
> array_1 = %w(tuna salmon herring)
> array_2 = %w(crow owl eagle dove)
>
> def parser (*argument)
>   argument.each do |item|
>     $array << item
>   end
> end
>
> parser(array_1,array_2) # taking multiple arguments generates error
> $array.flatten!
> puts $array
>
> Output:
> =======
> tuna
> salmon
> herring
> crow
> owl
> eagle
> dove
>
> But in the first method why such `space` causes the errors to be thrown
> up?
>
> --
> Posted via http://www.ruby-forum.com/.
>

In Ruby, you do not have to use parens around a method. So `method(arg)`
 can be written as `method arg`. Lets say arg was some expression, you
might want to put parens around it to make it clearer. `method (true &&
false)` which corresponds to `method((true && false))` So when you say
`parser (array_1, array_2)`, that becomes `parser((array_1,array_2))` but
`(array_1, array2)` is not a valid expression in Ruby.

That is what is meant here (
http://stackoverflow.com/questions/15488899/how-to-pass-multiple-arguments-into-a-ruby-method)
when he says "Instead of treating array_1 and array_2 as args, it's
treating it as a parenthesized expression"

-Josh