为什么 () returns nil in Ruby?

Why does () returns nil in Ruby?

在Ruby,当你运行:

()
=> nil

输出为nil。我不明白这是使用哪种 Ruby 机制。

我以为是在调用self(),但是self() returns syntax error, unexpected '(', expecting end-of-input.

为什么会这样 return nil,这使用了哪种语言功能?

"No value" 在 Ruby 的很多地方被视为 nil:

-> { break }.()
#⇒ nil

42 if false
#⇒ nil

这里也是一样:括号是多余的,但是它们维护了代码块,空的,因此被视为nil


使用 Ruby 2.6+ 你可以自己检查 AST:

main > RubyVM::AbstractSyntaxTree.parse('()')
#⇒ (SCOPE@1:0-1:2 tbl: [] args: nil body: (BEGIN@1:1-1:1 nil))