2010-09-04 20 views
25

एक ग्रूवी ट्यूटोरियल में, मैं निम्नलिखित कोड का सामना करना पड़ा:ग्रोवी << ऑपरेटर का मतलब इस संदर्भ में क्या है?

class DateTagLib { 
    def thisYear = { 
    out << Calendar.getInstance().get(Calendar.YEAR) 
    } 
} 

मैं क्या << साधन नहीं पता है, और मैं गूगल के साथ कोई किस्मत हो रही है।

संपादित करें: अब मुझे पता है कि << कभी-कभी थोड़ा सा बदलाव होता है। लेकिन इसका मतलब क्या है?

+0

मेरे पूरे जीवन में ग्रोवी की एक पंक्ति को देखे बिना, ऐसा लगता है कि 'वापसी foo' के लिए' out << foo' वाक्यविन्यास हो सकता है। या बाहर किसी प्रकार की वस्तु है जो एक फंकी ओवरलोड के साथ होती है जिसके परिणामस्वरूप एक ही चीज़ होती है, यानी 'आउट' ऑब्जेक्ट पर '<<' ऑपरेटर बस इसके पैरामीटर मान देता है ... –

+0

एक '<< =' जैसा लगता है यहां अधिक उपयुक्त है लेकिन मैं इसे वास्तव में समझ में नहीं आता हूं। – djangofan

उत्तर

46

ग्रोवी में, बिटवे ऑपरेटरों को कक्षा पर परिभाषित leftShift (<<) और rightShift (>>) विधियों के साथ ओवरराइड किया जा सकता है। तारों, बफर, धाराओं, सरणी आदि पर कार्यों को जोड़ने के लिए leftShift विधि का उपयोग करने के लिए यह मूर्खतापूर्ण ग्रोवी है और जो आप यहां देख रहे हैं।

उदाहरण के लिए:

  • अतिभारित leftShiftOutputStream पर तरीकों जो बाइट्स संलग्न करने के लिए उपयोग किया जाता है, एक InputStream, या स्ट्रीम करने के लिए एक Object
  • List है, जो भी एक संलग्न

आप एक grails टैग lib पर देख रहे हैं के रूप में यह का उपयोग करता है, तो बाहर पेज कि गाया जा रहा है प्रतिनिधित्व करता है। इस टैगलिब के परिणाम आउटपुट बफर में जोड़े जाएंगे जो क्लाइंट को प्रदान किए जाएंगे।

5

यह मानते हुए कि बाहरSystem.out < < ऑपरेटर इस मामले में बाहरलिए लिखता है। आउटपुट के लिए < < ओवरलोड करने के लिए मुहावरे (एक स्ट्रीम में लिखना) और >> इनपुट के लिए (स्ट्रीम से पढ़ना) सी ++ से आता है। जब स्टेडियो लाइब्रेरीज़ (आईट्रीम ओस्ट्रीम इत्यादि) परिभाषित हो गया है, तो विचार बाएं शिफ्ट और आउटपुट और इनपुट के लिए सही शिफ्ट का उपयोग करने के लिए पैदा हुआ था।

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