2016-04-08 78 views
4

很多變量需要一些處理,所以我正在檢查它們中的任何一個是否爲nil。有沒有更有效的方式來編寫以下內容?檢查多個變量爲零

unless a.nil? || b.nil? || c.nil? || d.nil? || e.nil? || f.nil? || g.nil? 
    render 'view' 
end 

或者我應該避免在一行上檢查很多變量nil

+0

是'FALSE'有效還是一樣'nil'?因爲如果'false'與'nil'相同,我會放棄'.nil?'方法調用(無論如何會降低性能)。即使其他代碼的讀取效果更好,我也懷疑@Meier的回答會有什麼更好的表現(除了**,也許**將「if」刪除),所以我們得到了&a && b && c && d && e && f && render('view')') – Myst

+0

@Myst,對不起,我忘了提及一些變量是不能爲空的數組,所以從@zetetic的答案中得出結論,'if [a,b,c, d,e,f,g] .none {| x | x.nil? || x.empty? }「是一個很好的解決方案? – massaskillz

+1

在Rails中,您還可以使用'blank?'方法,該方法可以在NilClass,String和Array的實例上調用。所以'.none(&:blank?)'可能就是你要找的東西。 – zetetic

回答

6

通過使用none?你可以有if而不是unless

if [a,b,c,d,e,f,g].none?(&:nil?) 

細想起來,這可以簡單地降低:

,如果你不介意的治療falsenil

Is there一種更有效的方式來編寫以下內容?

我想一個更好的問題是,「有寫的更表現方式......」

7
unless [a,b,c,d,e,f,g].include?(nil) 
    render 'view' 
end 
2
render 'view' unless [a,b,c,d,e,f,g].any?(&:nil?) 

另一種方式:

render 'view' if [a,b,c,d,e,f,g].index(nil) 
+0

現在這將返回意外。請參閱:http://apidock.com/ruby/Enumerable/any%3F – vee

+0

@vee,'[nil,1,3] .any? #=>真正的錯? – Ilya

2

也有一些其他的方法:

arr = [a,b,c,d,e,f,g] 
render 'view' if arr.compact == arr 
2

如果您a,b,c...是對象(或東西是永遠不會false),你可以把它寫像這個:

if a && b && c && d && e && f 
    render 'view' 
end