2010-08-14 2 views
2

나는 원숭이 패치를 원하거나 열거 할 수 있습니다. 나뿐만 아니라 경우 nil을 처리하는 나는 다음과 같은 테스트 케이스 및 확장과 함께 올라와있다 :이 루비에서 처리하는 나쁜 방법입니다

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 

시험 패스 그러나 이것은 잘못된 느낌과 false를 반환하는 더 나은 방법이 있는지 궁금 해서요 has_elements를 호출하거나 어떻게 처리해야합니까?

+8

먼저 열거 할 #의 has_elements' '내부 인 경우를'self'는 할 수 없다' nil'이므로 체크 할 필요가 없습니다. 'has_elements'를'not empty? '로 정의 할 수 있습니다. 둘째로 모든 열거 형이'size' 메소드를 갖는 것은 아닙니다. 마지막으로'? '를 사용하여 부울 값을 반환하는 메서드가 루비의 규칙입니다. 넷째, 이것을 처리하는 가장 좋은 방법은'NilClass'를 만지지 않고 단순히 열거 형을 반환하는 모든 메서드가 결코 nil을 반환하지 않는지 확인하는 것입니다. – sepp2k

+2

ActiveSupport (레일스의 일부)에서'Object # blank? '에 대해 알고 있습니까? –

답변

0

ActiveSupport 보석에는 이미이 기능이 있습니다. Rails 프로젝트에 있다면, .empty 메서드는? 사용할 수 있습니다. 그렇지 않으면 당신은 activesupport 보석을 포함하고,이 방법이 필요 파일 안에 다음을 수행해야합니다 : 모든

require 'active_support/core_ext/object/blank' 
관련 문제