2012-09-27 4 views
3

나 자신에게 물으면 더 좋은 코드를 볼 것이라고 생각한다. object.not_nil? vs !object.nil?. 그래서 내 질문 : 정말 아무 편의 방법이 있습니까? nil? 설탕 먹을 래? 내 눈앞에 있나요? 나는 그것을 볼 수 없습니까, 아니면 중요한 점을 놓치고 있습니까?! nil에 대한 편리한 방법이 있습니까?

+3

것은이 : 시간의 99 %는'전무 필요하지 않습니다'전혀?. 'obj.nil? '은'false'에서'nil'을 말하지 않는 한 (보통은 아님)'obj'라고 쓰여질 수 있습니다. – tokland

+0

완벽하게 이해할 수 있습니다. –

+0

분명히 나는'if! obj.nil?'->'if obj'를 의미했습니다. Ruby에서만 잘못된 값은'nil'과'false'이며 다른 모든 것은 true입니다. – tokland

답변

6

어때?

not object.nil? 

그러나 할 수있는 쉬운 일이 변수 자체를 테스트하여의 "truthiness"를 확인하는 것입니다. nil은 암시 적으로 false이므로 object을 확인할 수 있습니다.

+0

고마워요! 그것은 많은 의미를가집니다 :) –

+0

"not object.nil?" "! object.nil"보다 항상 더 나은 선택은 아니지만 일부 구문에서는 "not"가 다음 표현식에 너무 느슨하게 바인딩됩니다. –

4

설탕을 상위 수준에서 섭취 할 수 있습니다. 대신에 :

if not object.nil? 

당신은 쓸 수 있습니다 :이 약

unless object.nil? 
+0

나는 모두의 대답을 받아 들일 수 있으면 좋겠다. 감사! –

3
  • 무엇을?

    if object 
        # sth 
    end 
    

    object 거짓하지만 코드에 따라 경우 실행되지 않습니다 동일하지 않습니다, 그것은 더 좋을 수 있습니다. 당신이 ruby-on-rails-3로 질문을 태그로, (중 동일하지 않습니다)

  • 또 다른 해결책 : present?를 사용 [] 또는 !object.nil? 달리 {}의 블록을 실행하지 않습니다.

  • 다시 경우의 따라 다른 하나 unless를 사용하여 조건이 더 복잡한 경우 (&& 및/또는 ||로) 정말 좋은하지 않습니다.

  • 당신의 상태는이 양식의 경우 : 당신이 레일을 사용으로

    if !object.nil? && object.something? 
        # sth 
    end 
    

    당신은 다음과 같이, try를 사용할 수 있습니다

    if object.try(:something?) 
        # sth 
    end 
    
  • 다른 모든 경우에

    , !object.nil? 또는 not object.nil? 내가 추측하는 최상의 솔루션을 유지합니다.

2

약 #nil? Activesupport의 방법 #blank? 및 #present? 어느 쪽도 잊어서는 안된다.

nil.not_nil?
==> false

3.not_nil?
==> true :

class Object 
    def not_nil? 
     !self.nil? 
    end 
end 

당신은 같은 일을 할 수있다 : 당신이 필요로 할 것입니다,하지만 당신은 not_nil?에게 자신을 소개 할 수있는

2

하지 않음

a = []
10 a.not_nil?
==> true

관련 문제