當我意識到Enumerable#all?的行爲不像我認爲的那樣時,我今天正在調試一些代碼。.all上的奇怪行爲? {block}
我使用這種方法來確定何時立即返回一個值。它看起來是這樣的:
def some_method(hash)
unless hash.all? { |k, v| v.is_a? Float }
return hash
end
# some other business logic
end
但有時候這種方法被髮送空哈希和all?
結果不是我所期望的。
下面是一些正常的情景:
[7] pry(main)> {'count' => 1}.all? { |k, v| v.is_a? Float }
=> false
[8] pry(main)> {'count' => 2.5 }.all? { |k, v| v.is_a? Float }
=> true
這裏就是它得到奇怪:
[6] pry(main)> {}.all? { |k, v| v.is_a? Float }
=> true
我不希望這個返回true,其實我會希望拿回"No method .is_a? for NilClass"
但我反而回到了真實。有人知道爲什麼嗎?
的Ruby 2.2.0
僅供參考您無法獲得無方法異常,因爲'.is_a?'是NilClass上的方法。 'nil.is_a? Float => false' – Charlie