0

为什么这些表达不同:

!x == "string"

x != "string"

至少第一个表达式没有输入 my if,当我更改它时,if代码被执行。

4

3 回答 3

7

假设 x 是“foo”

!x == "string"

扩展为

false == "string"

这与您的第二个示例完全不同,后者扩展为:

"foo" != "string"
于 2013-06-23T18:33:22.437 回答
2

你期望“不是 x”是什么?它是否等于“字符串”或任何字符串?

这只是一个完全不同的说法。

您提到了 if 语句,因此这必须是您用于逻辑语句的条件。由于 not x 永远不会等于字符串,因此 if 语句的条件将始终为假。

于 2013-06-23T18:41:15.500 回答
-2

至少第一个表达式不输入我的 if

这是我的解释:

!那么有更高的优先级==。所以在你的表达!x == "string"中将在内部表示为(!x) == "string"

!x要么 将被评估为trueor false,它们分别是TrueClassorFalseClass对象。现在让我们检查一下对象使用了谁的#==方法。truefalse

true.method(:==).owner
# => BasicObject
false.method(:==).owner
# => BasicObject

Basic#==: Equality — 在对象级别,== 仅当 obj 和 other 是同一个对象时才返回 true。

根据上述定义,您的代码!x == "string"应始终评估为false.

于 2013-06-23T18:34:21.237 回答