2009-06-15 13 views
12

मुझे इस बारे में अनिश्चितता है कि मुझे वास्तव में स्प्रेड-डॉट ऑपरेटर का उपयोग करने की आवश्यकता है। अगर मैं इस तरह के रूप एक सूची है:ग्रोवी स्प्रेड-डॉट ऑपरेटर

def animals = ['ant', 'buffalo', 'canary', 'dog'] 

क्योंकि दोनों animals और सूची के सदस्यों को एक आकार() विधि है, तो आदेश विधि सूची (बजाय सूची के तत्वों पर लागू करने के लिए में

animals*.size() 
बजाय

: ही), मैं उपयोग करने की आवश्यकता

animals.size() 

हालांकि, निम्नलिखित अभिव्यक्ति जो विधि के नाम है कि टी पर उपलब्ध हैं की एक सूची देता है पर विचार वह स्ट्रिंग वर्ग

String.metaClass.methods.name 

कैसे ग्रूवी पता है कि मैं name संपत्ति सूची के प्रत्येक तत्व String.metaClass.methods द्वारा लौटाए से प्राप्त किया करना चाहते हैं, के बजाय स्वयं सूची (प्रसार-डॉट ऑपरेटर का उपयोग किए बिना)? इस मामले में उपयोग करने के लिए नियमों का एक सेट है जैसे:

  • विधि/संपत्ति सूची पर मौजूद है, तो यह सूची
  • अन्यथा पर आह्वान सूची के प्रत्येक तत्व के लिए यह आह्वान करने के लिए कोशिश

धन्यवाद, डॉन

+0

एएस मैजिको। – Randolpho

उत्तर

10

संक्षिप्त उत्तर यह है कि DefaultGroovyMethods adds a "getAt" method to all Collections जो संग्रह के माध्यम से पुन: प्रयास करता है और प्रत्येक के लिए संपत्ति मूल्य एकत्र करता है।

यदि आप लंबे उत्तर में रूचि रखते हैं, तो मैंने कुछ समय पहले blog post that dives down the metaClass rabbit hole on this exact topic लिखा था।

+1

ब्लॉग पोस्ट सूची टूटी हुई है – casper