2012-04-16 12 views
26

में Iteratee, Enumerator, Enumeratee को समझ नहीं सकता है मैंने अभी Play 2.0 फ्रेमवर्क सीखना शुरू कर दिया है। एक चीज जिसे मैं समझ नहीं पा रहा हूं वह play tutorial में वर्णित Iteratee, Enumerator और Enumeratee पैटर्न है। मुझे कार्यात्मक भाषाओं में बहुत कम अनुभव है।Play 2.0

यह पैटर्न क्या पूरा करता है?

यह मुझे गैर-अवरुद्ध/प्रतिक्रियाशील कोड लिखने में कैसे मदद करता है?

कुछ सरल उदाहरण मदद करेंगे।

+0

Play के रचनाकारों से भी नई प्रस्तुति है। यह शायद आपके सभी सवालों का जवाब देगा। http://www.infoq.com/presentations/play-I-ll-See-Your-Async-and-Raise-You- प्रतिक्रिया – biesior

+0

यहां एक [ब्लॉग पोस्ट] है (http://apocalisp.wordpress.com/2010/10/17/स्केलज़-ट्यूटोरियल-गणना-आधारित-आईओ-साथ-इटेटेट// इटेटेट्स के बारे में। जोश सुएरेथ के बारे में उनके बारे में एक ब्लॉग पोस्ट भी है: http://jsuereth.com/scala/2012/02/29/iteratees.html –

+0

और [सामान्य मानवों के लिए Play2 Iteratees को समझना] (http: // mandubian।कॉम/2012/08/27/समझ-प्ले 2-इटेटेट्स-सामान्य-इंसान /) –

उत्तर

19

playframework 2.0 डाउनलोड कुछ नमूने के साथ आता है। जिनमें से दो Iteratee/धूमकेतु उदाहरण हैं। उदाहरण के लिए, धूमकेतु की घड़ी sample app पता चलता है:

lazy val clock = Enumerator.fromCallback {() => 
    Promise.timeout(Some(dateFormat.format(new Date)), 100 milliseconds) 
} 

तो यह इस तरह प्रयोग किया जाता है:

Ok.stream(clock &> Comet(callback = "parent.clockChanged")) 

कौन सा मात्रा में ग्राहक के लिए परिणाम फीड होगा। Enumerator ऑब्जेक्ट में fromFile, fromStream (java.io.InputStream में) उपयोगिता गणनाकर्ता फ़ंक्शन भी हैं।

मुझे यकीन नहीं है कि यह कहां किया जाता है लेकिन धारणा यह है कि यह खंडित प्रसंस्करण धागे को बांध नहीं रहा है। कुछ बेंचमार्क देखना बहुत दिलचस्प होगा, क्योंकि इटैरेट्स के कार्यान्वयन में निश्चित रूप से ओवरहेड होता है क्योंकि संसाधित होने के साथ-साथ गणना विभिन्न वस्तुओं में लिपटे होती है।

डेटा जो एक गणक से खिलाया जाता है, लपेटा जाता है ताकि यह इंगित कर सके कि प्रक्रिया के लिए अधिक डेटा है या डेटा अंत तक पहुंच गया है (ईओएफ)। इटेटेट्स के प्रसंस्करण के परिणाम भी लपेटे जाते हैं ताकि यह इंगित कर सके कि परिणाम की गणना करने के लिए कुछ इनपुट या अधिक इनपुट पर परिणाम की गणना की गई है या नहीं। मैं जॉन डी गोस 'nescala presentation की सिफारिश करता हूं जो एक गुना से इटरेटेस के विकास को दिखाता है। संपादित करें: ब्रेंडन मैकएडम्स में एक अच्छा स्काला दिन 2012 presentation एसिंक और गैर-अवरोधन पर है - प्रस्तुति के अंत की ओर (~ 26min) यह इटेटेट्स पर छूता है और यह एसिंक शैली में डेटाबेस कर्सर शैली IO को संसाधित करने में कैसे मदद करता है।

Iteratees का एक टाटा लाभ यह है कि वे लिखते हैं। यहां ऐसे कुछ तरीके वे रचना कर रहे हैं:

  • आप एक enumator andthen फ़ीड कर सकते हैं एक और
  • आप कर सकते हैं नक्शाT का एक प्रगणक से अधिक प्रकार (T) => U के एक समारोह U
  • का एक प्रगणक को पाने के लिए आप दो प्रगणक
  • बिछा कर सकते एक iteratee कुछ इनपुट छोड़ सकते हैं एक और iteratee से भस्म किया जाना
+0

वह वीडियो प्रस्तुति निजी प्रतीत होती है। – Traveler

+0

@ ट्रैवलर, हाँ वास्तव में, यह शर्म की बात है क्योंकि यह सार्वजनिक होता था। मुझे नहीं पता कि यह जानबूझकर या अस्थायी निरीक्षण है या नहीं। – huynhjl

+0

@ ट्रैवलर, मुझे लगता है कि उन्होंने इसे ठीक किया है, मैंने अभी कोशिश की है और वीडियो अब उपलब्ध है। – huynhjl

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