你为什么要用!! 操作者
我在一个例子中遇到了ruby
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
,但是,您也会返回数据。 通过双重否定它,您返回一个适当的布尔值。
免责声明:不是ruby程序员,而是对此有所了解。
!!
,double bang或“not not”,可能会将值转换为布尔值。 一个!
返回布尔对面,然后另一个bang将其翻转为正常的布尔值。
这是一个双重否定,导致一个布尔值:
irb(main):016:0> !1 => false irb(main):013:0> !0 => false irb(main):014:0> !nil => true irb(main):015:0> !!nil => false
是的,在您的情况下,您可以确定该函数仅返回true或false。 如果你省略!! 你会返回一个角色列表
通过这个小技巧,您可以获得表达式的实际布尔值,例如:
!! 3 => true !! nil => false !! 0 => true
在Ruby中任何不是零或假的东西都是真的!
在您的示例代码中,此技巧可确保您永远不会返回任何其他内容
但无论是真是假
如果你省略!! ,你会返回角色列表,或者是nil