【问题标题】:Why does `x =! 5` return false?为什么`x =! 5`返回假?
【发布时间】:2014-02-03 22:01:48
【问题描述】:

我一直在研究运算符优先级,有人向我解释x =! 5 返回false。我似乎无法再次向自己解释为什么。我知道=! 不是运营商,所以x5 仍然存在。那么这是否意味着 Ruby 不知道该怎么做呢?如果是这样,ruby 应该返回一个错误,因为x 可以没有价值? Ruby 是否在运算符处停止,然后将 false 的值分配给 x

x =! 5 
=> false

【问题讨论】:

  • x != 5!= 运算符测试不等式)当然会在未定义 x 时生成错误,或者如果 x 为 nil(或 5 以外的任何值),则 true 会生成错误。
  • 除了优先级之外,BasicObject 是 Ruby 中所有类的父类 - 您可以在此处找到定义的 !。所有对象,当出现在一个条件中时,要么是真,要么是假。 Ruby 的灵活性允许许多变化 !(5)! 55.!!5 甚至 !'hello' 都将评估为 false。

标签: ruby boolean operator-precedence


【解决方案1】:

Ruby 中没有=! 运算符之类的东西。 != 用于检查 not equal

所以基本上,当解析器查看代码并找到= 时,它会查找以= 开头的其他运算符,例如==。如果没有找到匹配项,这里就是这种情况 (=!),它会将表达式视为赋值,并将右侧分配给左侧。在这种情况下,= 的右侧是! 5,等于 false。

【讨论】:

    【解决方案2】:

    这是因为x =! 5 被解释为x = (!5) (! has higer precedence than =)。在 Ruby 中,每个对象都是 true,除了 nilfalse5 具有 truthy 值,您使用运算符 ! 来否定它。所以false 作为结果被分配给局部变量x

    ! Called Logical NOT Operator - 用于反转其操作数的逻辑状态。如果条件为true,则逻辑NOT 运算符将生成false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 2012-06-12
      • 2014-09-07
      • 2021-11-19
      • 2013-10-17
      • 1970-01-01
      • 2013-04-18
      相关资源
      最近更新 更多