>我想
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?
。