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

为什么()在Ruby中返回nil?,ruby,language-features,Ruby,Language Features,在Ruby中,运行时: () => nil 输出为nil。我不明白这是使用哪种Ruby机制 我以为它正在调用self(),但是self()返回语法错误,意外的“(”,期望输入结束 为什么会返回nil,它使用的是哪种语言功能?在Ruby中的很多地方,“No value”被视为nil: -> { break }.() #⇒ nil 42 if false #⇒ nil 这里也是一样:括号是多余的,但它们维护代码块,即空代码块,因此它被视为nil 使用Ruby 2.6+您可以自己检

在Ruby中,运行时:

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

我以为它正在调用
self()
,但是
self()
返回
语法错误,意外的“(”,期望输入结束

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

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

sry,无法通过:)因此,它与
begin相同;结束
?严格地说,不完全是因为
开始结束声明代码块,而括号不声明。但是返回
nil
的行为和原因是相同的,是的。我认为
()
确实声明了一个代码块,不是吗?哦,的确,你是对的。我的坏,我其实从来没有意识到这一点。
self
是一个对象
self()
请求一个名为
self
的方法,该方法不存在
()
不是方法调用,它只是将“nothing”分组,并将其视为
nil