为什么露比告诉我在场?当存在值时为 false



>我想

arg.present?

是真相和光,以检查字符串是空的还是零的,但是我注意到一个令人困惑的情况。 如果我的字符串是:

arg = "t"

我得到一个错误的结果:

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

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

所以#present?它与#blank?相反,#blank?被定义为"如果对象为假、空或空格字符串,则为空"。

"\t"是一个空格字符串(制表符(,因此它是#blank?的,并且不是#present?

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

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

我建议阅读并尝试Active Support的核心文档中的示例。

这可能有助于解释:

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?因为它是empty?

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

tab不是empty?,因为它有内容,但它是空白,所以它不present?,它是blank?

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

period不是empty?blank?,因为它不是空格,但它是present?

最新更新