9

これが機能しない理由を説明してください (JDK7 の Groovy 2.0.5)。リストからいくつかのマップエントリを追加したいだけです。

def map = new HashMap<String,String>()
map << ["key":"value"]

def list = ["a","b","c"]
list.each {
    map << [it:"value"]
}
println map
println map.a
println map.containsKey("a")

/*
[key:value, a:value, b:value, c:value]
null        <- ?
false       <- ?
*/

また、次の場合も機能しません。

map << ["$it":"value"]

しかし、それは以下で動作しています:

map << [(""+it):"value"]

???

4

1 に答える 1

14

これ

map << [it:"value"]

というキーを使用するだけitです。かっこで囲むと、次のようになります。

map << [(it):"value"]

それはあなたが望むように動作します...

もしあなたがそうするなら:

map << ["$it":"value"]

GStringImpl次に、キーとしてではなく :があることがわかりますjava.lang.String

println map.keySet()*.getClass().name
// prints [GStringImpl, GStringImpl, String, GStringImpl ]

(簡潔にするためにパッケージ名は省略されています)

次に、文字列で GString キーを検索しようとしましたが、これは失敗しました (このページの「GString は文字列ではない」セクションを参照してください) 。

これは機能します:

map << [(""+it):"value"]

it文字列を作成するだけなので(空の文字列に追加することにより)

とにかく...要するに、使用してください[(it):'value']

于 2012-10-30T13:00:43.093 に答える