簡體   English   中英

Ruby中用於“puts {} .class”的意外行為

[英]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)按預期工作。

有幾點需要了解:

  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM