为什么这些表达不同:
!x == "string"
和
x != "string"
至少第一个表达式没有输入 my if
,当我更改它时,if
代码被执行。
为什么这些表达不同:
!x == "string"
和
x != "string"
至少第一个表达式没有输入 my if
,当我更改它时,if
代码被执行。
假设 x 是“foo”
!x == "string"
扩展为
false == "string"
这与您的第二个示例完全不同,后者扩展为:
"foo" != "string"
你期望“不是 x”是什么?它是否等于“字符串”或任何字符串?
这只是一个完全不同的说法。
您提到了 if 语句,因此这必须是您用于逻辑语句的条件。由于 not x 永远不会等于字符串,因此 if 语句的条件将始终为假。
至少第一个表达式不输入我的 if
这是我的解释:
!
那么有更高的优先级==
。所以在你的表达!x == "string"
中将在内部表示为(!x) == "string"
!x
要么 将被评估为true
or false
,它们分别是TrueClass
orFalseClass
对象。现在让我们检查一下对象使用了谁的#==
方法。true
false
true.method(:==).owner
# => BasicObject
false.method(:==).owner
# => BasicObject
Basic#==
: Equality — 在对象级别,== 仅当 obj 和 other 是同一个对象时才返回 true。
根据上述定义,您的代码!x == "string"
应始终评估为false
.