2009-10-17 9 views
7
def array = [1,2,3,4,5] 
println 3 in array 

प्रिंट true। किसी ऑब्जेक्ट के लिए in का समर्थन करने के लिए मुझे अधिभार की आवश्यकता क्या है?मैं ग्रोवी में ऑपरेटर में ओवरलोड कैसे करूं?

उदाहरण:

class Whatever { 
    def addItem(item) { 
     // add the item 
    } 
} 

def w = new Whatever() 
w.addItem("one") 
w.addItem("two") 
println "two" in w 

मैं जानता हूँ कि मैं संग्रह इस वर्ग के सार्वजनिक उपयोग करता बना सकता है, लेकिन मैं बजाय in उपयोग करना चाहते हैं।

+0

क्या आप इसका नमूना दे सकते हैं कि आप क्या करना चाहते हैं? –

उत्तर

8

मैंने ग्रोवी मेलिंग सूची पर पूछा। Here's धागा। जवाब isCase

class A 
{ 
    def isCase(o) { 
    return false; 
    } 
} 

a = new A() 
println 6 in a // returns false 
+0

स्वीट। एक त्वरित खोज के बाद, ऐसा लगता है कि यहां दस्तावेज किया गया है: http://docs.codehaus.org/display/GROOVY/JN2535-Control#JN2535- नियंत्रण- कंडीशनिंग स्टेटमेंट्स –

+0

+1। काश मैं इस +1 के लिए गिलाउम लाफोर को वोट दे सकता हूं, आखिरकार, वह मेलिंग सूची पर इसका जवाब देने वाला था ;-) – Leonel

1

मुझे आश्चर्य है कि यह संभव है, तो सदस्यता ऑपरेटर (इन) Operator Overloading पृष्ठ पर सूचीबद्ध नहीं है।

+0

मैंने यह भी देखा। – Geo

2

आप WhateverCollection या संग्रह सबिनटरफेस लागू कर सकते हैं। Object के लिए ग्रोवी के पास iterator()implementation है, और यह ऑपरेटरों के लिए दिखता है जो कुल वस्तुओं पर काम करते हैं, ग्रोवी ऑब्जेक्ट को संग्रह में बदलने का प्रयास करेंगे और फिर कुल कार्य निष्पादित करेंगे।

वैकल्पिक रूप से, आप WhateverIterable लागू करने में सक्षम हो सकते हैं। मैं अभी भी इसके लिए एक संदर्भ खोजने की कोशिश कर रहा हूं और इसे सत्यापित करने के लिए अवधारणा का सबूत लिख रहा हूं।

Groovy documentation for the Iterator Pattern संकेत दे सकता है कि यह काम करेगा।

संबंधित मुद्दे