2013-12-16 5 views
0

я борюсь со следующим кодом:Lambda возвращающие различные значения

  • Я хочу метод, чтобы проверить, если строка имеет содержание или нет.
has_content = -> (a) { a!=nil && a.strip != ''} 

c = ' ' 

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

Почему реакция отличается? Ясно, что мне не хватает знаний Proc/lambdas.

+2

'c.has_content' должен вызывать ошибку ... Как вы получаете' истину'? –

+0

согласны с Арупом! –

+0

КПП. более идиоматическим способом проверки пустого содержимого будет '! (a.nil? || a.empty?)'. –

ответ

1

Я считаю, что в этом коде есть что-то, что вызывает такое поведение.

has_content не определен для строки, поэтому если вы не определили его раньше, он должен вызвать ошибку

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 = ->(a) { !a.to_s.strip.empty? } 

И вот пример

has_content.(nil) 
# => false 
has_content.('') 
# => false 
has_content.(' ') 
# => false 
has_content.('hello') 
# => true 
Смежные вопросы