ruby 中和 rails 中分别定义了empty? 和 blank? 方法,
如果单单从对方法名理解的角度看的话,对只包含一个空格的字符串 a 分别调用两个方法:
blank?表示空白,空格是空白,应该返回true;
而empty表示空,也即什么都没有,字符串a中包含有一个空格字符,并不为空,所以应该返回false;
这跟下面程序的执行结果是相一致的。
a = " " # a 为只包含一个空格的字符串
a.blank? # => true
a.empty? # => false
但是我看了 blank?的源代码之后就犯迷糊了:
def blank?
respond_to?(:empty?) ? empty? : !self
end
根据 blank?的源代码来看a.blank?难道不应该返回false的吗?
a.respond_to?(:empty?) ? a.empty? : !a # => false