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。