當我使用map
,select
和其他Enumerable
方法時,我注意到以下差異。當使用do ... end blocks時,與map,select等不同的行爲
假設我們有一個哈希象下面這樣:
h = {a: 1}
下面的代碼打印的select
輸出符合市場預期。
p h.select { |k, v| true }
#=> {:a=>1}
然而,下面的代碼顯示輸出是Enumerator
,即使當已提供的塊。
p h.select do |k, v|
true
end
#=> #<Enumerator: {:a=>1}:select>
任何想法的行爲爲什麼這種差異?我經常遇到這個問題,因爲我在工作時一直使用檢查p
,這種行爲經常使我的思維過程出軌。
什麼是出路,我需要在其周圍放置括號來解決優先。 –
這完全取決於你。而且,是的,括號會起作用。 – mudasobwa
它可能不是運算符優先級,可能是如何解釋函數調用的參數。是否更有可能發生評估爲'p(h.inspect)do..end'而不是'(p h.select)do ... end'? –