你为什么要用!! 操作者

我在一个例子中遇到了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