2010-08-14 37 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' 
相关问题