Groovy真相不一致?为什么列表不能用==运算符强制转换为“true”?

时间:2012-12-21 01:51:14

标签: groovy

以下所有断言均为true

def obj = ["XXX"]
assert  true && obj // OK
assert  obj // OK
assert  ![] // OK

为什么胁迫不能在下一个中发挥作用?

assert  true == obj // List is NOT coerced to true

3 个答案:

答案 0 :(得分:10)

因为==运算符不期望布尔操作数。

强制适用于第二种情况因为&& operator需要布尔操作数,在第三种情况下,因为assert需要一个布尔操作数。但是==运算符接受任何类型的操作数,如果类型或值不同,则返回false。

答案 1 :(得分:1)

在布尔上下文(AKA falsey)中计算时,空集合为false,所以

assert ![]

评估为true并且断言通过。

答案 2 :(得分:0)

' ==' operator被转换为 equals(Object o)方法调用,因此它适用于任何类型的Object,而不仅仅是Boolean,因此没有理由将强制强制为布尔值。