Ruby 为什么'x=!5`返回错误?

Ruby 为什么'x=!5`返回错误?,ruby,boolean,operator-precedence,Ruby,Boolean,Operator Precedence,我一直在研究运算符优先级,有人向我解释说x=!5返回false。我似乎无法再次向自己解释为什么。我知道不是运算符,因此x和5保留。那是不是意味着Ruby不知道该怎么办?如果是这样,ruby应该返回一个错误,因为x可以没有值?Ruby是否在运算符处停止,然后将值false分配给x x =! 5 => false 这是因为x=!5被解释为x=(!5)()。在Ruby中,除了nil和false之外,每个对象都是true5具有您正在使用运算符进行求反的真实值。因此,将false作为结果分配给局

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

x =! 5 
=> false

这是因为
x=!5
被解释为
x=(!5)
()。在Ruby中,除了
nil
false
之外,每个对象都是
true
5
具有您正在使用运算符进行求反的真实值
。因此,将
false
作为结果分配给局部变量
x


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

不存在
=操作符<代码>=
是检查
是否不相等的内容


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

x!=5
!=
运算符不平等性测试)当然会在没有定义x的情况下产生错误,或者在x为nil(或5以外的任何值)的情况下产生错误。除了优先级之外,BasicObject是Ruby中所有类的父类-这就是您可以找到
的地方已定义。所有物体,当处于某种状态时,要么真实,要么虚假。Ruby的灵活性允许多种变体
!(5) 
!5
5
!5
甚至
!'hello“
将全部计算为false。