[英]Unexpected behaviour in Ruby for “puts {}.class”
puts {}.class
#=> NilClass
puts "".class
String
#=> nil
puts [].class
Array
#=> nil
为什么puts {}.class
不显示Hash
作为输出,然后像其他人一样nil
?
puts {}
被解释为puts
方法调用,其中传入空块,因此为空结果。 puts({}.class)
按预期工作。
有几点需要了解:
每当哈希是被调用方法的第一个参数时,你需要使用括号或删除大括号,否则ruby认为它是一个块。 所以puts { foo: "bar" }
会引发语法错误,但puts foo: "bar"
, puts(foo: "bar")
或puts({foo: "bar"})
工作正常。
可以使用块调用每个方法,但只有一些方法实际上调用了块。 您可以自己测试 - puts(1) { raise }
只输出数字,并且不会引发错误。 puts { 1 }
什么都不打印,因为没有调用块。
puts
方法总是返回nil。 因此,当你说puts {}.class
,它与puts.class
基本相同,它是NilClass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.