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?
On Mon, Mar 18, 2013 at 8:33 PM, Pritam D. [email protected]
wrote:
end
^
$array << item
salmon
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 (
How to pass multiple arguments into a Ruby method - Stack Overflow)
when he says “Instead of treating array_1 and array_2 as args, it’s
treating it as a parenthesized expression”
-Josh
To expand a bit on Josh C.'s reply:
In general, get in the habit of not leaving a space before the opening
paren of a function call that uses parens. That’s what trips up the
parser and makes it think you’re passing one malformed expression, not
multiple arguments. This used to trip me up in my early days of Ruby,
because my standard coding style DID include a space there…
-Dave