次のスニペットではgString
、マップから取得できません。
def contents = "contents"
def gString = "$contents"
def map = [(gString): true]
assert map.size() == 1 // Passes
assert gString.hashCode() == map.keySet().first().hashCode() // Passes, same hash code
assert map[gString] // Fails
一体どうしてそれが可能なのでしょうか?
アサーション メッセージは、Groovy に深刻な問題があることを明確に示しています。
assert map[gString] // Fails
| ||
| |contents
| null
[contents:true]
なぜgroovyが辞書にいくつかの値を表示しないのと同じ質問ではありませんか? 最初の答えは次のとおりです。
GString インスタンスをキーとしてマップに追加し、String インスタンスを使用してそれらを検索しています。
この質問では、 を明確に追加GString
して取得しようとしていますGString
。
また、マップで GString キーをアドレス指定する方法に異なる動作があるのはなぜですか? また、GStringImpl で equals() および == を使用した場合の Groovy の異なる結果にも、答えはありません。私は何も変異させず、 と混合String
しませんGString
。