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