以下のアサーションはすべてtrue
.
def obj = ["XXX"]
assert true && obj // OK
assert obj // OK
assert ![] // OK
次のもので強制が機能しないのはなぜですか?
assert true == obj // List is NOT coerced to true
以下のアサーションはすべてtrue
.
def obj = ["XXX"]
assert true && obj // OK
assert obj // OK
assert ![] // OK
次のもので強制が機能しないのはなぜですか?
assert true == obj // List is NOT coerced to true
== 演算子はブール オペランドを想定していないためです。
2 番目のケースでは && 演算子がブール オペランドを想定しているため強制が適用され、3 番目のケースでは assert がブール オペランドを想定しているため強制が適用されます。ただし、== 演算子は任意の型のオペランドを受け入れ、型または値が異なる場合は false を返します。
空のコレクションは、ブール値のコンテキストで評価されると false (AKA falsey) になるため、
assert ![]
に評価されtrue
、アサーションが渡されます。
「==」演算子はequals(Object o)メソッド呼び出しに変換されるため、ブール値だけでなく、あらゆる種類のオブジェクトで機能するため、強制的にブール値にする理由はありません。