你为什么要使用 !!操作员
我在一个例子中遇到了一些 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)
加双感叹号给评价加点什么吗?
I came across abit of ruby in a example
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
Why would you ever use !!
? Is it not the same as
return self.roles.find_by_name(role.to_s.camelize)
Does adding the double exclamation mark add something to the evaluation?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
如果您只需要布尔值而不是对象,则可以使用它。除
boolean false
之外的任何非 nil 对象都表示true
,但是,您也会返回数据。通过双重否定,您将返回一个正确的布尔值。You use it if you only want the boolean, not the object. Any non-nil object except for
boolean false
representstrue
, however, you'd return the data as well. By double negating it, you return a proper boolean.免责声明:不是 ruby 程序员,但对此有所尝试。
!!
、双声或“not not”可能会将值转换为布尔值。一个!
返回相反的布尔值,然后另一次敲击会将其翻转为其正常的布尔值。Disclaimer: Not a ruby programmer but having a stab at this.
!!
, double bang or "not not", might convert the value to a boolean. One!
returns the boolean opposite and another bang thereafter will flip it to its normal boolean value.这是一个双重否定,会产生一个布尔值:
This is a double negation which results in a boolean:
是的,在您的情况下,您可以确定该函数仅返回 true 或 false。如果你愿意省略的话!!您将返回角色列表
Yes in your case you can be sure that the function is returning only true or false. If you would omit !! you would return a list of roles
通过这个小技巧,您可以获得表达式的实际布尔值,例如:
在 Ruby 中,任何不是 nil 或 false 的东西都是 true!
在您的示例代码中,此技巧可确保您永远不会返回任何其他内容
但无论真假,
如果你省略 !! ,您将返回角色列表,或 nil
with this little trick you get the actual boolean value of an expression, e.g.:
In Ruby anything that isn't nil or false , is true!
In your example code this trick makes sure that you never return anything else
but true or false
If you would omit the !! , you would return the list of roles, or nil