为什么Ruby告诉我在场?有价值的时候是假的吗?

时间:2017-05-22 21:33:00

标签: ruby-on-rails ruby string activesupport is-empty

我想

arg.present?
为了检查一个字符串是空的还是零,

是真理和光明,但是我注意到一个令人困惑的案例。如果我的字符串是:

arg = "\t"

我得到了错误的结果:

2.4.0 :003 > arg = "\t"
 => "\t"
2.4.0 :004 > arg.present?
 => false

检查我的字符串参数是空还是零是什么更简单的方法?当然,我可以写arg.empty? || arg.nil?但我正在寻找一种更简洁的方式。

2 个答案:

答案 0 :(得分:7)

所以#present?#blank?相反,#blank?定义为"如果对象为false,空或空格字符串,则该对象为空。&#34 ;

" \吨"是一个空白字符串(一个标签),因此它是#blank?,而不是#present?

请注意" \ t"由于字符串的构造方式,它只被解释为制表符。

2.2.5 :001 > "\t".present?
 => false 
2.2.5 :002 > '\t'.present?
 => true 

答案 1 :(得分:-1)

我建议阅读并使用Active Support's Core documentation中的示例。

这可能有助于解释:

require 'active_support/core_ext/object/blank'

empty_str = ''
tab = "\t"
period = '.'

empty_str.empty? # => true
empty_str.present? # => false
empty_str.blank? # => true

一个空字符串是empty?,它没有任何价值(或内容),所以没有任何东西可以present?,而它是blank?因为它&# 39; s empty?

tab.empty? # => false
tab.present? # => false
tab.blank? # => true

tab不是empty?因为它有内容,但它有空格,所以它不是present?而是blank? period.empty? # => false period.present? # => true period.blank? # => false 1}}。

period

empty?不是blank?present?,因为它不是空格,而是$().submit()