在红宝石中 Integer === 5 返回 true. 。相似地 String === "karthik" 返回 true.
然而, 5 === Integer 返回 false. 。和 "karthik" === String.
为什么操作员不接值?

有帮助吗?

解决方案

简单的答案是:因为这没有意义。操作员描述的关系不是交换性的,为什么操作员应该是?

只需查看您自己的示例: 5 是一个 Integer. 。但是 Integer 一个 5?那甚至是什么 意思是?

=== 是个 案例包含操作员, ,并且收集不上下班。

案件包含操作员使用的事实平等符号,通常称为 三重平等, threequals 或者 case equality 操作员是 可怕 不幸的是,它不仅有 绝对没有 处理平等,但它也不符合平等符合的许多法律,例如传递性和您提到的换算性。

我对我的更多咆哮 ===

其他提示

一个非常简单的原因是 is_a? 课堂的关系不能是可交换的。考虑两个操作数是类的情况:

Class === String

这将返回true,因为 String.is_a?(Class). 。然而 String === Class 会返回false,因为 Class.is_a?(String) 是错误的,当然是应该的。

另一个原因是 === 取决于其左操作数。这又有两个原因:a)在Ruby中,语义始终取决于左操作数,因为左操作数是方法调用的接收器,b)它很有用,因此您可以在某种情况下使用EG类,范围和Regexen带有预期语义的陈述。

许多运营商没有能力。

=== 被称为“案例平等运算符”,因为当分支为案例时称为。

很好,有用:

foo = 42
case foo
when Integer
  # branches here
when String
  # etc...
end

如果这不是很有用的话

foo = Integer
case foo
when 42
# would branch here??
when 666
# etc...
end

请注意,在Ruby 1.9中 === PROC/LAMBDA上的运营商将致电该PROC:

divisible_by_three = ->(x){x % 3 == 0}
divisible_by_three === 42 # => true

再次,非常有用 case 声明,但不超过相反的顺序。

当比较时,它需要实施案例

拥有非交通运营商是正常的。

/ - % [] . -> ^ << >> < <= > >= && || = += -= ,

而且碰巧 === 部分存在 案例 操作员。在Ruby中,这是相当复杂的,如果必须将其简化为可交换的OP,那就不可能了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top