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,或者我應該如何處理?
首先,如果您在'Enumerable#has_elements'內,'self'不能'零「,所以沒有必要檢查。你可以將'has_elements'定義爲'not empty?'。其次,並非所有的枚舉都有一個'size'方法。第三,Ruby中的約定是用'?'返回布爾結尾的方法。第四,處理這個問題的最好方法是不要觸及'NilClass',並簡單地確保返回枚舉的所有方法都不返回nil。 – sepp2k 2010-08-14 09:15:36
你知道ActiveSupport(Rails的一部分)中的Object#blank?嗎? – 2010-08-14 14:43:42