2015-04-17 63 views
0

undefined method 'each' for nil:NilClass定義爲零的方法「每個」:NilClass

行,所以,我知道有正在談論的數百個問題。
我知道這個錯誤信息是什麼意思,我知道如何處理。

我的問題是:有沒有辦法強制nil類返回一個空數組?
我的第二個問題:它會安全嗎?

感謝
塞巴斯蒂安

+3

你可以爲'NilClass'定義'each',但這是非常難看的解決方案。如果我是你,我會堅持'(array_or_nil || [])。each {| e | #code}' –

+0

你能詳細說明一下你的用例嗎? – Saurabh

+0

爲什麼不把'to_a'添加到可能是'nil'的值?看起來更清楚 – lx00st

回答

2

1)當然,你可以補丁(總是隻有一個對象在Ruby中的線程,所以你可以修補它,而不是NilClass):

def nil.each 
    puts 'Hey' 
end 

nil.each #outputs 'hey' 

2)但是,你應該永遠做這樣的事情,因爲它可以打破很多東西里面很多甚至是Ruby本身。

0

如果你正在使用類似@products ..try三元操作

@products = @products.present? ? @products : [] 

是的,它是安全的,如果你處理得當使用空,並檢查您之前所需要的相關的值你繼續前進或保存它們

0

可以修補的你調用每個在類:直接可枚舉

class SomeItem 
    def each(&block) 
    [] unless super(&block) 
    end 
end 

或修補,但我持懷疑態度感動核心類的方式。

相關問題