3

以下のアサーションはすべてtrue.

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

次のもので強制が機能しないのはなぜですか?

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

3 に答える 3

10

== 演算子はブール オペランドを想定していないためです。

2 番目のケースでは && 演算子がブール オペランドを想定しているため強制が適用され、3 番目のケースでは assert がブール オペランドを想定しているため強制が適用されます。ただし、== 演算子は任意の型のオペランドを受け入れ、型または値が異なる場合は false を返します。

于 2012-12-21T02:28:40.283 に答える
1

空のコレクションは、ブール値のコンテキストで評価されると false (AKA falsey) になるため、

assert ![]

に評価されtrue、アサーションが渡されます。

于 2012-12-21T14:06:59.473 に答える
0

「==」演算子はequals(Object o)メソッド呼び出しに変換されるため、ブール値だけでなく、あらゆる種類のオブジェクトで機能するため、強制的にブール値にする理由はありません。

于 2015-01-06T08:34:18.840 に答える