2016-04-18 2 views
0

でfalseですか?実際にはGString.equals()メソッドの実装をチェックした後、それはうまく動作しません。

public boolean equals(Object that) { 
    if (that instanceof GString) { 
     return equals((GString) that); 
    } 
    return false; 
} 

疑問が残っている、それが動作を要求される、それはこの場合には、設計によってtrueを返すべきではないのですか?それはのような、非常に予期しない動作に遭遇するのは簡単だ場所でfalse

"${'1'}" in ['1', '2', '3'] 

...はfalseを返すために起こっています。

現在の動作は、equalsおよびhashCode整合性契約の結果であるか、より正確な結果を返すように改善できますか?

+0

だから、 "$ { - > val}" 'はどうなりますか? 'val'は後でバインドされます。しかしバインドされるまでは、Groovy StringのString表現は例外をスローします。 –

+0

基本的に、Groovyの文字列は文字列ではありません。 –

+0

また、http://docs.groovy-lang.org/latest/html/documentation/index.html#_gstring_and_string_hashcodes –

答えて

0

これはバグかどうか、 "それがどのように機能する"かが議論されています。しかし、それはしばらくありました。あなたが実行しているのは、同じコンテンツと同等ではないStringGStringを比較していることです。私はこの動作がGroovyの現在のリリースで修正されていると思っていましたが、間違っている可能性があります。

あなたは、目的の動作を取得するために使用することができます以下あなたがSetMapまたは値のキーとしてGString Sを使用する場合

("${'1'}" as String).equals('1') 

また、これはあなたを噛まします。

関連する問題