Ruby中的意外行为"放置{} .class"

时间:2018-01-31 07:42:31

标签: ruby

puts {}.class

#=> NilClass 

puts "".class
String
#=> nil 

puts [].class
Array
#=> nil

为什么puts {}.class没有显示Hash作为输出,然后nil显示为其他人?

2 个答案:

答案 0 :(得分:20)

puts {}被解释为puts方法调用,并将空块传入其中,因此结果为空。 puts({}.class)按预期工作。

答案 1 :(得分:15)

有几点需要了解:

  1. 每当哈希是被调用方法的第一个参数时,你需要使用括号或删除大括号,否则ruby认为它是一个块。因此,puts { foo: "bar" }会引发语法错误,但puts foo: "bar"puts(foo: "bar")puts({foo: "bar"})可以正常工作。

  2. 每个方法都可以用块调用,但只有一些方法实际上调用了块。您可以自己测试 - puts(1) { raise }只输出数字,并且不会引发错误。 puts { 1 }不打印任何内容,因为该块未被调用。

  3. puts方法始终返回nil。因此,当您说puts {}.class时,它与puts.class基本相同,即NilClass