您可能已经知道,在惯用的 Ruby 中,永远不会在方法末尾和括号内的参数列表之间插入空格。Some风格指南明确禁止.
还有一个务实的原因。
1.9.2-p290 > def concat(a, b)
1.9.2-p290 > a + b
1.9.2-p290 > end
1.9.2-p290 > concat 'foo', 'bar'
=> "foobar"
1.9.2-p290 > concat('foo', 'bar')
=> "foobar"
1.9.2-p290 > concat ('foo', 'bar')
SyntaxError: (irb):27: syntax error, unexpected ',', expecting ')'
以这种方式调用任何方法都会遇到错误,而不仅仅是Kernel.raise
.
我不熟悉 Ruby 内部结构,但我想原因是当参数列表前面有空格时,Ruby 期望“无括号”样式。所以这当然有效:
1.9.2-p290 :035 > concat ("bar"), ("foo")
=> "barfoo"
据推测,Ruby 在将结果传递给方法之前尝试计算每个括号表达式的内容。我推测写作raise (TypeError, "Error message")
要求 Ruby 评估TypeError, "Error message"
,这当然失败了。