为什么()在Ruby中返回nil?
在Ruby中,运行时:为什么()在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+您可以自己检
()
=> 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
。