为什么()在Ruby中返回nil?

时间:2019-01-24 16:34:42

标签: ruby language-features

在Ruby中,运行时:

()
=> nil

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

我以为它正在呼叫self(),但是self()返回syntax error, unexpected '(', expecting end-of-input

为什么会返回nil,并且使用的是哪种语言功能?

1 个答案:

答案 0 :(得分:7)

在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))