Lambda返回不同的值

时间:2013-12-16 10:18:07

标签: ruby lambda proc

我正在努力解决以下问题:

  • 我想要一种方法来检查字符串是否包含内容。
has_content  = -> (a) { a!=nil && a.strip != ''}

c = ' '

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

为什么回答不同?很明显,我缺乏一些Proc / lambdas知识。

1 个答案:

答案 0 :(得分:1)

我相信该代码中缺少导致此类行为的内容。

没有为String定义

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