2011-06-26 17 views
6

ग्रोवी में एक ब्रांड नए ऑपरेटर को परिभाषित करना संभव है?ग्रोवी में एक नया ऑपरेटर परिभाषित करना संभव है?

def trade = 200 @ 10 

इस प्राप्त है: मैं एक व्यापार जहां किसी को इस तरह 10 की कीमत के लिए 200 आइटम खरीदता है व्यक्त करने के लिए चाहते हैं?

धन्यवाद

संपादित करें: मैं यह स्पष्ट है कि मैं एक ऑपरेटर को परिभाषित करने के लिए एक विधि नहीं जोड़ने में दिलचस्पी है बनाना चाहते हैं। चीयर्स।

+3

नहीं, वर्तमान में यह संभव नहीं है, आपको अपने ऑपरेटरों को परिभाषित करने के लिए मौजूदा ऑपरेटरों का उपयोग करना होगा –

+0

+ अच्छा सवाल :) –

+0

ऐसा लगता है कि [स्पॉक बॉयज़] (http://code.google.com/p/ स्पॉक/विकी/इंटरैक्शन # रिटर्न_वल्यूज) ने इसे '>>>' ऑपरेटर के साथ करने में कामयाब रहा है जिसका उल्लेख [ऑपरेटर ओवरलोडिंग] (http://groovy.codehaus.org/Operator+Overloading) सूची में नहीं किया गया है [ श्री। Muschko] (http://stackoverflow.com/users/528428/benjamin-muschko)। क्या कोई या तो समझा सकता है कि यह कैसे किया जा सकता है या कोई निश्चित नहीं है? मुझे डर है मुझे लगता है कि मैं वर्तमान उत्तरों को स्वीकार नहीं कर सकता। मेरे साथ असर के लिए धन्यवाद। –

उत्तर

2

मैं काफी यकीन है कि कैसे आप @ हस्ताक्षर के लिए यह काम कर सकते हैं, लेकिन आप निश्चित रूप से इस तरह के आपरेशन जो मैं वास्तव में अधिक अर्थपूर्ण लगता है जोड़ सकता है नहीं कर रहा हूँ:

Number.metaClass.buyFor { Integer price -> 
    delegate * price 
} 

def result = 200.buyFor(10) 
println result 
+0

धन्यवाद। दुर्भाग्यवश यह वास्तव में मेरे प्रश्न का उत्तर नहीं देता है। मुझे पता है कि मैं "बंदर पैचिंग" के माध्यम से विधियों को जोड़ सकता हूं, लेकिन मैं वास्तव में एक ऑपरेटर को परिभाषित करना चाहता हूं। –

+1

ऐसा लगता है कि '@' चिह्न अभी तक समर्थित नहीं है [अधिभार योग्य ऑपरेटर] (http://groovy.codehaus.org/Operator+Overloading)। यदि आप किसी भी उपलब्ध ऑपरेटरों के लिए व्यवस्थित कर सकते हैं तो आप ऊपर बताए अनुसार इसे कार्यान्वित कर सकते हैं। –

0
Number.metaClass."@" {Integer x -> delegate * x} 

assert (2.'@' (2)) == 4 
+0

प्रवेश के लिए धन्यवाद। आप करीब हैं, लेकिन कोई सिगार नहीं है। जैसा कि मैंने बेन का उल्लेख किया है, मैं इस सवाल पर एक जवाब ढूंढ रहा हूं कि एक नया ऑपरेटर परिभाषित करना संभव है कि कोई विधि न जोड़ें। –

6

हम हमेशा क्षमता चाहता था ग्रोवी में उपयोगकर्ता के माध्यम से एक ऑपरेटर को परिभाषित करने के लिए, लेकिन अब तक हम उन समस्याओं के आसपास नहीं गए हैं जो इसके साथ आते हैं। तो वर्तमान स्थिति यह है कि ग्रोवी कस्टम ऑपरेटरों का समर्थन नहीं करता है, केवल वे लोग जो पहले ही उपयोग में हैं।

+0

इस उत्तर को लिखा गया था, यह 3 साल हो गया है। इस स्थिति की कोई बदलाव? – kinbiko

+1

नहीं ... और अगले वर्ष में धन के बिना इसे बदलने की संभावना नहीं है – blackdrag

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