2012-10-30 14 views
8

के साथ मानचित्र प्रविष्टि जोड़ें कृपया बताएं, यह क्यों काम नहीं कर रहा है (जेडीके 7 पर ग्रोवी 2.0.5)। मैं सिर्फ एक सूची से कुछ नक्शा प्रविष्टियां जोड़ना चाहता हूं।ग्रोवी - Iterator

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"] 

???

उत्तर

13

यह

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 कुंजी ऊपर देखो, और यह (देखें अनुभाग on this page 'GStrings तार नहीं कर रहे हैं') विफल रहता है

यह काम करता है:

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

यह सिर्फ एक स्ट्रिंग बनाता है के रूप में वैसे भी

... लम्बी कहानी कम (रिक्त स्ट्रिंग पर it जोड़कर), का उपयोग [(it):'value']