Ruby对象的blank?方法是什么?

3
有人可以详细解释一下这个对象方法吗(我指这里使用的语法: empty? , !!empty? 和!self):
def blank?
  respond_to?(:empty?) ? !!empty? : !self
end

或者建议一本关于这个主题的好书。


1
你可能需要添加一些上下文来说明你在哪里看到这个信息? - John Powell
https://github.com/feedbin/refresher/blob/master/lib/core_ext/blank.rb#L12 - Andriy V
1
或者可以推荐一本关于这个主题的好书。例如,Ruby的语法在ISO Ruby语言规范中有描述。符号字面量在第8.7.6.6节中描述,方法调用在11.3.1中描述,self在11.5.4.8.4中描述,!在11.2.3中描述。 - Jörg W Mittag
4个回答

5
如果self有方法empty?,则返回double not empty?,否则返回single not selfnot!)是Ruby中将任何对象转换为布尔值的惯用方式。 single not!)对于任何truthy对象返回false,对于任何falsey对象返回truedouble not!!)对于任何truthy对象返回true,对于任何falsey对象返回false
在Ruby中,nilfalse是falsey对象,任何其他对象都是truthy。
因此,respond_to?(:empty?) ? !!empty? : !self实际上检查当前对象是否定义了empty?方法,并在该方法返回任何truthy响应时返回true,或在falsey响应的情况下返回false。如果未定义empty?,则仅在self不是falsenil(任何falsey对象)时始终返回false。

1
我指的是这里使用的语法::empty?,!!empty?和!self
- :empty? :这是一个Symbol字面量 - !!empty?:由两部分组成: - empty?:一个无接收者、无参数的消息发送 - !:用于发送消息!的语法糖,即!foo等同于foo.! - self:特殊变量self的字面量。

-1
如果某物为空,则它是空白的。如果它不为空,则它不是空白的。如果它不知道自己是否为空,则被认为不是空白的。

-2

def blank? respond_to?(:empty?) ? !!empty? : !self end

定义 blank 判断函数,(无意义的缩进)使用 respond_to 方法判断属性 empty 是否存在,如果存在则返回它是否为空值,否则返回 self 是否为空值。该函数属于模块内的结尾。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接