为什么`x =! 5`返回false?

时间:2014-01-15 12:23:36

标签: ruby boolean operator-precedence

我一直在研究运算符优先级,并向我解释x =! 5返回false。我似乎无法再向自己解释原因。我知道=!不是运营商,因此x5仍然存在。这是否意味着Ruby不知道该怎么办?如果是这样,ruby应该返回错误,因为x没有价值? Ruby是否停留在运算符上,然后将值false分配给x

x =! 5 
=> false

2 个答案:

答案 0 :(得分:36)

这是因为x =! 5被解释为x = (!5)! has higer precedence than =)。在Ruby中,除了truenil之外,每个对象都是false5 truthy 值,您使用运算符!否定该值。因此,false作为结果分配给局部变量x

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

答案 1 :(得分:0)

Ruby中没有=!运算符这样的东西。 !=检查not equal

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