Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 你为什么要用!!操作人员_Ruby_Operators - Fatal编程技术网

Ruby 你为什么要用!!操作人员

Ruby 你为什么要用!!操作人员,ruby,operators,Ruby,Operators,我在一个例子中遇到了一点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) 添加双感叹号是否会给计算增加一些内容?如果只需要布尔值,而不需要对象,则可以使用它。除布尔值false之外的任何非nil对象都表示真,但是,您也会返回数据。通过双反运算,您将返回一个

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

添加双感叹号是否会给计算增加一些内容?

如果只需要布尔值,而不需要对象,则可以使用它。除
布尔值false
之外的任何非nil对象都表示
,但是,您也会返回数据。通过双反运算,您将返回一个正确的布尔值。

这是一个双反运算,其结果是布尔值:

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。如果你愿意省略!!您将返回一个角色列表

免责声明:不是ruby程序员,但尝试过这一点


、double bang或“not not”可能会将值转换为布尔值。一个
返回布尔值的相反值,然后另一个砰的一声将其翻转为正常的布尔值。

通过这个小技巧,您可以得到表达式的实际布尔值,例如:

!! 3 
=> true

!! nil
 => false 

!! 0
 => true 
在Ruby中,任何不是零或假的东西都是真的

在您的示例代码中,此技巧确保您永远不会返回任何其他内容
但是是真是假


如果你想省去这个,您将返回角色列表,或者对于区域性返回nil

,请注意
操作符通常被称为“双重爆炸操作符”。还要注意,
返回
self.
在这里都是多余的。@Kernald-hmm,没有!!操作人员