以下所有断言均为true
。
def obj = ["XXX"]
assert true && obj // OK
assert obj // OK
assert ![] // OK
为什么胁迫不能在下一个中发挥作用?
assert true == obj // List is NOT coerced to true
答案 0 :(得分:10)
因为==运算符不期望布尔操作数。
强制适用于第二种情况因为&& operator需要布尔操作数,在第三种情况下,因为assert需要一个布尔操作数。但是==运算符接受任何类型的操作数,如果类型或值不同,则返回false。
答案 1 :(得分:1)
在布尔上下文(AKA falsey)中计算时,空集合为false,所以
assert ![]
评估为true
并且断言通过。
答案 2 :(得分:0)
' ==' operator被转换为 equals(Object o)方法调用,因此它适用于任何类型的Object,而不仅仅是Boolean,因此没有理由将强制强制为布尔值。