逻辑等效于字符串比较

时间:2013-06-23 18:30:36

标签: ruby if-statement logic

为什么这些表达方式不同:

!x == "string"

x != "string"

至少第一个表达式不会进入我的if,当我更改它时,会执行if个代码。

3 个答案:

答案 0 :(得分:7)

假设x是“foo”

!x == "string"

扩展为

false == "string"

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

"foo" != "string"

答案 1 :(得分:2)

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

这只是一个完全不同的陈述。

你提到了一个if语句,所以这必须是你用于逻辑语句的条件。由于x不会等于字符串,因此if语句条件将始终为false。

答案 2 :(得分:-2)

  

至少第一个表达式不会进入我的

以下是我的解释:

!的优先级高于==。因此,在您的表达式中!x == "string"将在内部表示为(!x) == "string"

!x将评估为truefalse,分别为TrueClassFalseClass个对象。现在让我们检查#==true对象使用的false方法。

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

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

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