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

sum*_*ulu 3 groovy

所有以下断言都是true.

def obj = ["XXX"]
assert  true && obj // OK
assert  obj // OK
assert  ![] // OK
Run Code Online (Sandbox Code Playgroud)

为什么强制不能在下一个工作?

assert  true == obj // List is NOT coerced to true
Run Code Online (Sandbox Code Playgroud)

Jer*_*ist 10

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

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

  • @sumnulu这实际上会使==运算符与其他运算符不一致,而不是更多.无论第一个操作数的类型如何,其他运算符对第二个操作数使用相同的强制规则.唯一的例外是算术运算符,如果其中一个操作数是非整数,则使用不同的强制规则. (3认同)