ruby - Why is f(arg, superfluous_arg) an ArgumentError but f (arg, superfluous_arg) a SyntaxError? -
in ruby 1.9.3, have function single argument. if call correctly, works either or without whitespace separating name , parenthesis. if pass argument, fails in 2 different ways. why?
irb(main):001:0> def f(a); a; end => nil irb(main):002:0> f(1) => 1 irb(main):003:0> f(1, 2) argumenterror: wrong number of arguments (2 1) (irb):1:in 'f' (irb):3 /usr/bin/irb:12:in '<main>' irb(main):004:0> f (1) => 1 irb(main):005:0> f (1, 2) syntaxerror: (irb):5: syntax error, unexpected ',', expecting ')' f (1, 2) ^ /usr/bin/irb:12:in '<main>' irb(main):006:0> ruby_description => "ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]"
the first error:
>> f(1, 2) argumenterror: wrong number of arguments (2 1) ...is pretty straightforward, you're passing 1 argument many.
let's concentrate on second error!
>> f (1, 2) this equivalent to:
>> f((1, 2)) which invalid syntax. because:
(1, 2) ...isn't valid expression either. can see more this:
>> 1, 2 syntaxerror: (irb):9: syntax error, unexpected ',', expecting $end why f (1) work?
well (1) evaluates 1:
>> (1) => 1 what mean?
method calls "method_name(parameter1, parameter2, …)" (with no space before opening parenthesis) or "method_name parameter1, parameter2, …" (with no parentheses @ all).
mixing spaces , parentheses lead unexpected behaviour somewhere down line, have seen.
Comments
Post a Comment