这个结果背后的逻辑是什么?

Ger*_*rry 24 ruby

def foo(_, _='override')
  _
end

p foo("bye bye")
p foo("hello", "world")
Run Code Online (Sandbox Code Playgroud)

输出:

"override"
"hello"
Run Code Online (Sandbox Code Playgroud)

我能理解结果是:

"override"
"world"
Run Code Online (Sandbox Code Playgroud)

甚至:

"bye bye"
"hello"
Run Code Online (Sandbox Code Playgroud)

但是我得到的结果让我感到困惑.

Ser*_*sev 0

一种可能的解释是名称_代表“未使用的变量”。您甚至不应该引用它,更不用说期望它的任何值。由于它是一个特殊的名称,因此解析器会对其进行特殊处理(例如抑制“重复参数”错误)。我想没有人关心让这段代码产生逻辑结果,因为这些都是未使用的变量。

如果将其重命名为其他任何名称(例如,a),您将收到错误,因为现在此方法签名没有意义。

  • 我认为几乎每个人都同意不应在生产代码中引用“_”。但其背后应该有一些返回特定值的逻辑。我认为OP正在询问这个问题。你的回答没有错,但仍然没有回答问题。 (2认同)