我碰到红宝石升技的例子你为什么要用!!运营商
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
来到你为什么会用不完!!
?是不是相同
return self.roles.find_by_name(role.to_s.camelize)
是否添加双重感叹号添加评价的东西?
我碰到红宝石升技的例子你为什么要用!!运营商
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
来到你为什么会用不完!!
?是不是相同
return self.roles.find_by_name(role.to_s.camelize)
是否添加双重感叹号添加评价的东西?
如果您只需要布尔值而不是对象,则可以使用它。除boolean false
之外的任何非零对象都代表true
,但是,您也会返回数据。通过双重否定它,你返回一个合适的布尔值。
这是一个双重否定,导致一个布尔值:
irb(main):016:0> !1
=> false
irb(main):013:0> !0
=> false
irb(main):014:0> !nil
=> true
irb(main):015:0> !!nil
=> false
是在你的情况,你可以肯定的是,函数返回只有真或假。如果你会忽略!你会返回一个角色列表
免责声明:不是一个红宝石程序员,但刺伤了这一点。
!!
,double bang或“not not”,可能会将该值转换为布尔值。其中一个!
返回布尔值相反的值,之后的另一个值将会将其翻转为正常的布尔值。
用这个小动作,你得到一个表达式的实际布尔值,例如:
!! 3
=> true
!! nil
=> false
!! 0
=> true
在Ruby中任何不为零还是假的,是真的!
在您的示例代码这一招可以确保您永远不会返回别的
但真或假
,如果您省略了! ,您将返回角色列表,或者无
对于文化,请注意'!!'运算符通常称为“双重运算符”。 –
另请注意,'return'和'self.'在这里都是多余的。 –
@Kernald - 嗯,没有!运营商。 – steenslag