2010-08-14 40 views
2

我想猴子補丁或擴展enumerable。我想處理爲零的情況下,以及和我想出了下面的測試案例和擴展:這是一種在Ruby中處理的不好的方法

module Enumerable 
    def has_elements 
    (self) && (self.size > 0) 
    end 
end 

class NilClass 
    def has_elements 
    false 
    end 
end 

class EnumerableExtensionsTest < ActiveSupport::TestCase 

    should "return false for nil" do 
    d = nil 

    assert_equal(false, d.has_elements) 
    end 

end 

測試通過,但這種感覺錯了,我想知道是否有返回一個錯誤的更好的方法調用has_elements,或者我應該如何處理?

+8

首先,如果您在'Enumerable#has_elements'內,'self'不能'零「,所以沒有必要檢查。你可以將'has_elements'定義爲'not empty?'。其次,並非所有的枚舉都有一個'size'方法。第三,Ruby中的約定是用'?'返回布爾結尾的方法。第四,處理這個問題的最好方法是不要觸及'NilClass',並簡單地確保返回枚舉的所有方法都不返回nil。 – sepp2k 2010-08-14 09:15:36

+2

你知道ActiveSupport(Rails的一部分)中的Object#blank?嗎? – 2010-08-14 14:43:42

回答

0

ActiveSupport寶石已經具備此功能。如果你在Rails項目中,方法.empty?可用。否則,您需要包含activesupport gem並在需要此方法的文件中執行以下操作:

require 'active_support/core_ext/object/blank' 
相關問題