Ruby对象空白?方法

And*_*rew 3 ruby ruby-on-rails-4

有人可以详细解释这个Object方法(我的意思是这里使用的语法:空?,!!空?和!self):

def blank?
  respond_to?(:empty?) ? !!empty? : !self
end
Run Code Online (Sandbox Code Playgroud)

或者也许建议好书来阅读主题.

fl0*_*00r 5

如果self有方法empty?则返回double not empty?否则返回single not self.

not(!)是Ruby中用于将任何对象转换为布尔值的惯用方法

single not(!)返回false用于任何truthytrue任何falsey对象.

double not(!!)返回true用于任何truthyfalse任何falsey对象.

Ruby中的虚假对象是,nil而且false任何其他对象都是真实的.

所以.基本上respond_to?(:empty?) ? !!empty? : !self检查当前对象是否已定义方法empty?,如果此方法返回任何真实或假的错误响应,则返回true.如果empty?未定义,则如果self不是falsenil(任何falsey对象),它将始终返回false .