【问题标题】:Why would you use a !! operator你为什么要用一个!!操作员
【发布时间】:2011-11-25 13:40:25
【问题描述】:

我在一个例子中遇到了一点红宝石

def role?(role)
  return !!self.roles.find_by_name(role.to_s.camelize)
end

你为什么会使用!!?是不是和

一样
 return self.roles.find_by_name(role.to_s.camelize)

添加双感叹号是否会给评估增加一些东西?

【问题讨论】:

  • 对于文化,请注意!! 运算符通常称为“双键运算符”。
  • 还要注意returnself.在这里都是多余的。
  • @Kernald - 嗯,没有!!运算符。

标签: ruby operators


【解决方案1】:

如果您只想要布尔值而不是对象,则使用它。除了boolean false 之外的任何非零对象都代表true,但是,您也会返回数据。通过双重否定它,您返回一个正确的布尔值。

【讨论】:

    【解决方案2】:

    免责声明:不是 ruby​​ 程序员,但对此有所尝试。

    !!,双键或“不是”,可能会将值转换为布尔值。一个 ! 返回相反的布尔值,然后另一个 bang 将其翻转为正常的布尔值。

    【讨论】:

      【解决方案3】:

      这是导致布尔值的双重否定:

      irb(main):016:0> !1
      => false
      irb(main):013:0> !0
      => false
      irb(main):014:0> !nil
      => true
      irb(main):015:0> !!nil
      => false
      

      【讨论】:

        【解决方案4】:

        是的,在您的情况下,您可以确定该函数只返回真或假。如果你会省略!你会返回一个角色列表

        【讨论】:

          【解决方案5】:

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

          !! 3 
          => true
          
          !! nil
           => false 
          
          !! 0
           => true 
          

          在 Ruby 中,任何不是 nil 或 false 的东西都是真的!

          在您的示例代码中,此技巧可确保您永远不会返回任何其他内容
          但对或错

          如果你省略 !! , 你会返回角色列表,或者 nil

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-19
            • 2023-03-08
            • 1970-01-01
            • 2011-07-27
            • 1970-01-01
            相关资源
            最近更新 更多