2013-08-20 6 views
6

यह वास्तव में परेशान है जब आप फ्यूचर्स या अभिनेताओं के प्रतिक्रिया के साथ कुछ अत्यधिक समवर्ती कोड लिखते हैं और आपने मैन्युअल रूप से ExecutionContext.Implicits.global आयात किया है। कुछ अच्छे स्पष्टीकरण को खोजने का प्रयास किया गया है कि इसे डिफ़ॉल्ट पैरामीटर के रूप में क्यों नहीं बनाया गया है, जैसे doneStrategyScalaz Concurrent में done है। कोड में उन सभी आयातों को सम्मिलित/निकालने के लिए यह बहुत उपयोगी होगा। या क्या मुझे कुछ तर्क याद आ रहा है?वैश्विक निष्पादन कॉन्टेक्स्ट भविष्य में ब्लॉक में डिफ़ॉल्ट पैरामीटर क्यों नहीं है?

उत्तर

10

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

लेकिन कुछ भी आपको आपके कोड के लिए पैकेज-व्यापी निहित मूल्य को परिभाषित करने से रोकता है। ध्यान दें कि यदि निहित निष्पादन कॉन्टेक्स्ट हमेशा डिफ़ॉल्ट रूप से आयात किया गया था, तो आप ऐसा करने में सक्षम नहीं होंगे।

पैकेज वस्तु में:

package object myawsomeconcurrencylibrary { 
    implicit def defaultExecutionContext = scala.concurrent.ExecutionContext.global 
} 

एक ही पैकेज में किसी भी वर्ग में:

package myawsomeconcurrencylibrary 

object Bla { 
    future { ... } // implicit from package object is used unless you explicitly provide your own 
} 
संबंधित मुद्दे