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