2011-12-14 8 views
11

मैं इस परंपरा का उपयोग करके ग्रूवी वस्तुओं को बनाने के ...ग्रोवी में ऑब्जेक्ट गुणों को आवंटित करने के लिए शॉर्टंड तरीका?

Item item1 = new Item(name: "foo", weight: "150") 

... वहाँ से छेड़छाड़ गुण वस्तु के लिए एक आशुलिपि सम्मेलन है? कुछ इस तरह ...

item1(name: "hello", weight: "175") //this does not work, btw ;-) 

... के बजाय ...

item1.name = "hello" 
item1.weight = "175" 

उत्तर

17

आप with विधि है, as described by the great Mr Haki

item1.with{ 
    name = "hello" 
    weight = "175" 
} 
+0

मीठा, धन्यवाद ... क्या श्री हाकी एक भगवान है? ग्रोवी और ग्रेल्स उपयोगकर्ताओं के लिए – raffian

+0

@ रैफिएम, वह बहुत अच्छा है। (अपने ब्लॉग महान है) – Grooveek

3

हाँ, आप इसे इस तरह से कर सकते हैं :

item1.metaClass.setProperties(item1, [name: "hello", weight: "175"]) 
+0

तुम भी तरह '[नाम:" हैलो ", वजन:" 175 "] कुछ कर सकते हैं। प्रत्येक {ITEM1 [it.key] = it.value}' अगर वस्तु पर हावी नहीं होता ' सेट करें 'मेहोद या' [नाम: "हैलो", वजन: "175"]। प्रत्येक {item1.setProperty it.key, it.value} '। – epidemian

1

मैं item1.with पसंद करते हैं अगर मैं ठोस वैरिएबल नहीं

item1.with { 
    name = "lalal" 
    weight = 86 
    high = 100 
} 

बदलने के लिए मैं InvokerHelper.setProperties पसंद करते हैं जब मैं गुण के नक्शे है (किसी भी आकार हो सकता है)

@ToString 
class Item{ 
    def name 
    def weight 
} 
Item item1 = new Item(name: "foo", weight: "150") 

println "before: $item1" 
use(InvokerHelper) { 
    item1.setProperties weight: 22, name: "abc" 
} 
println "after : $item1" 

आउटपुट:

before: Item(foo, 150) 
after : Item(abc, 22) 
संबंधित मुद्दे