2010-02-18 64 views
2

我如何寫得更好。我試圖使用注入,而不是每個,但不斷遇到錯誤。我想收緊該塊。如何收緊這個Ruby代碼?

def to_proc 
    levels_of_nesting = @fields.zip(@orderings) 

    procedure = nil 
    levels_of_nesting.each do |field, ordering| 
     procedure = proc_for(field, ordering) and next if procedure.nil? 
     procedure = procedure.decorate_w_secondary_sorting_level(proc_for(field, ordering)) 
    end 
    procedure 
    end 
+0

如果第一次調用proc_for(第6行)返回nil,那麼第7行就會爆炸。 「下一個」應該是「還是下一個」? – 2010-02-18 05:22:46

+0

在我的電腦上運行良好。我正在使用1.9 – 2010-02-20 18:09:29

回答

3

我會使用地圖通過proc_for運行一切,然後結合使用注入特效。

def to_proc 
    @fields.zip(@orderings).map do |field, ordering| 
    proc_for(field, ordering) 
    end.inject do |prev,curr| 
    prev.decorate_w_secondary_sorting_level curr 
    end 
end 

這使得迭代器方法爲您做流控制,避免虛假的nils和if語句。

+0

Ahhh非常好。謝謝。 – 2010-02-20 18:12:39