blank?是rails扩充的一个方法,在工作中用的很多,一直以为对字符串判断的就是is_empty? && nil?,直到最近遇到问题才发祥想当然的错了。字符串的blank?并不是判断是空字符串! "\n".blank?返回的是true
查了下rails blank?的定义如下
activesupport/lib/active_support/core_ext/object/blank.rb
class String
BLANK_RE = /\A[[:space:]]*\z/
# A string is blank if it's empty or contains whitespaces only:
#
# ''.blank? # => true
# ' '.blank? # => true
# "\t\n\r".blank? # => true
# ' blah '.blank? # => false
#
# Unicode whitespace is supported:
#
# "\u00a0".blank? # => true
#
# @return [true, false]
def blank?
BLANK_RE === self
end
end
A string is blank if it's empty or contains whitespaces only,就是说blank?只有在字符串是空字符串或只包含空白字符(不可见字符,换行、制表、回车空格)。
刚开始觉得真是坑爹,细想才发现有道理,rails是web框架,浏览器输入判断我们一般需要把只含空白字符的输入作为非法输入,blank?方法可以很方便地作出判断。
ruby和rails定义的方法真的很多,我感觉工作中很多时候对方法的判断就是望文生义,这样肯定会出现类似的错误,看来需要抽些时间对不太有把握的地方查查api了
小贴士: true.blank? == false , false.blank? == true