gpt4 book ai didi

ruby - 为什么 f(arg, superfluous_arg) 是 ArgumentError 而 f (arg, superfluous_arg) 是 SyntaxError?

转载 作者:数据小太阳 更新时间:2023-10-29 07:45:17 24 4
gpt4 key购买 nike

在 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]"

最佳答案

第一个错误:

>> 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, …”(没有完全没有括号)。

如您所见,混用空格和括号可能会导致行中某处出现意外行为。

关于ruby - 为什么 f(arg, superfluous_arg) 是 ArgumentError 而 f (arg, superfluous_arg) 是 SyntaxError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16397070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com