在Ruby 1.9.3中,我有一个带有单个参数的函数。如果我正确地调用它,它可以使用或不使用空格分隔其名称和括号。如果我通过额外的论证,它会以两种不同的方式失败。为什么呢?
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 for 1)
from (irb):1:in 'f'
from (irb):3
from /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)
^
from /usr/bin/irb:12:in '<main>'
irb(main):006:0> RUBY_DESCRIPTION
=> "ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]"
答案 0 :(得分:9)
第一个错误:
>> f(1, 2)
ArgumentError: wrong number of arguments (2 for 1)
...非常简单,你只传递了一个参数太多了。
>> f (1, 2)
这相当于:
>> f((1, 2))
这也是无效的语法。这是因为:
(1, 2)
...也不是有效的表达式。你可以更简单地看到这个:
>> 1, 2
SyntaxError: (irb):9: syntax error, unexpected ',', expecting $end
f (1)
有效?好(1)
只评估为1
:
>> (1)
=> 1
Method calls看起来像这个“method_name(parameter1, parameter2, …)
”(在左括号前没有空格)或者像“method_name parameter1, parameter2, …
”(根本没有括号)。
正如您所见,混合空格和圆括号可能会导致某些地方出现意外行为。