2013-12-16 2 views
0

나는 다음과 같은 코드로 어려움을 겪고있어이 :람다 반환 다른 값

  • 나는 문자열 내용이 아닌지하는 방법을 확인합니다.
has_content = -> (a) { a!=nil && a.strip != ''} 

c = ' ' 

has_content.call(c) 
=> false 
c.has_content 
=> true 

왜 응답이 다른 ? 분명히 Proc/lambdas 지식이 부족합니다.

+2

'c.has_content'는 오류를 던져야한다. 어떻게'true'를 얻을 수 있는가? –

+0

Arup에 동의합니다! –

+0

Btw. 빈 내용을 검사하는 관용적 인 방법은'! (a.nil ?| a.empty?)'가 될 것입니다. –

답변

1

나는 그와 같은 행동을 일으키는 코드에 뭔가 빠져 있다고 생각합니다. 당신이 전에 그것을 정의되지 않는 한, 그것은 측면 참고로 오류

1.9.3p429 :002 > ''.has_content 
NoMethodError: undefined method `has_content' for "":String 
    from (irb):2 
    from /Users/weppos/.rvm/rubies/ruby-1.9.3-p429/bin/irb:12:in `<main>' 

를 제기해야하므로

has_content이 문자열에 대해 정의되지 않으며, 여기에 코드의 다른 버전의

has_content = ->(a) { !a.to_s.strip.empty? } 

그리고 여기에 예제가있다

has_content.(nil) 
# => false 
has_content.('') 
# => false 
has_content.(' ') 
# => false 
has_content.('hello') 
# => true