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

3
在Ruby中,当你运行以下命令时:
()
=> nil

输出结果是nil。我不理解这是使用了哪种Ruby机制。
我以为它调用的是self(),但self()返回syntax error, unexpected '(', expecting end-of-input
为什么会返回nil,这使用了哪种语言特性?

self 是一个对象。self() 是在请求一个名为 self方法,但该方法并不存在。() 不是一个方法调用,它只是将“nothing”分组,被视为 nil - tadman
1个回答

7
在Ruby中,“No value”在许多地方被视为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))

抱歉,我无法通过 :) - Sergio Tulentsev
1
那么,这和 begin; end 是一样的吗? - vinibrsl
严格来说,不完全一样,因为 begin end 声明了一个代码块而括号没有。但是它们都返回 nil 的行为和原因是相同的。 - Aleksei Matiushkin
2
我认为 () 声明了一个代码块,不是吗?https://repl.it/repls/FrozenVibrantRuntimes - vinibrsl
哦,确实,你说得对。我的错,我之前从未意识到这一点。 - Aleksei Matiushkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接