Ruby中用于"puts {} .class"的意外行为

MEE*_*ARI 15 ruby

puts {}.class

#=> NilClass 

puts "".class
String
#=> nil 

puts [].class
Array
#=> nil
Run Code Online (Sandbox Code Playgroud)

为什么puts {}.class不显示Hash输出然后nil像其他输出一样?

Mar*_*pka 20

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


max*_*ner 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