[英]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.