2012-05-20 29 views
0

每次我打電話驗證方法上的任何模式,我得到以下錯誤:驗證錯誤 - 未定義的方法「零?」

NoMethodError: undefined method `zero?' for nil:NilClass 

看來,如果我從我的自定義數組類中刪除功能和錯誤將消失:

class Array 
    def sum 
    inject(nil) { |sum,x| sum ? sum+x : x } 
    end 
.. 

這是怎麼發生的? 我該如何解決這個問題,仍然保留總和功能?

回答

1

的Rails已經提供了一種用於陣列一個sum功能(實際上可枚舉模塊上,以便它可以在其他集合使用)

它不同於你的函數在兩個方面:

  • [].sum返回0默認情況下,而不是零
  • 它接受一個塊,即[1,2,3].sum {|x| x * 2}返回12.

如果沒有回溯,很難分辨出來,但大概有些代碼是依賴於這兩種行爲中的第一種。刪除您的sum功能的定義,所有應該都可以。如果你需要空列表的總和爲nil rails'sum方法作爲一個可選參數作爲一個空列表返回什麼

+0

我實現它是因爲這個功能(加權隨機數組):http:// dzone。 com/snippets/weighted-random-array – Aljaz

+1

您不需要定義總和,因爲rails爲您定義了一個。據推測,你鏈接到的代碼的作者不想假定鐵軌的存在(或者它早於鐵軌的總和) –

相關問題