2013-01-22 20 views
6

मेरे पास स्कैला कक्षाओं (जैसे लिफ्ट्स बॉक्स, स्कैला का विकल्प इत्यादि) का एक गुच्छा है जो मैं क्लोजर आईएसईक के रूप में क्लोजर में का उपयोग करना चाहता हूं।स्कैला कक्षाओं से क्लोजर आईएसईक

मैं क्लोजर को कैसे बता सकता हूं कि इन वर्गों को आईएसईक्यू में कैसे बनाया जाए ताकि सभी विभिन्न अनुक्रम संबंधित कार्य "बस काम करें"?

उत्तर

2

आर्थर की जवाब पर निर्माण करने के लिए, आप इन पंक्तियों के साथ स्काला में एक सामान्य आवरण वर्ग प्रदान कर सकते हैं:

class WrapCollection(repr: TraversableOnce[_]) extends clojure.lang.Seqable { ... } 
2

यदि कक्षाएं Iterable इंटरफ़ेस को कार्यान्वित करती हैं तो आप उन्हें सिक्योरेंस प्राप्त करने के लिए seq पर कॉल कर सकते हैं। अनुक्रम पुस्तकालय में अधिकांश कार्य आपके लिए यह करेंगे हालांकि लगभग सभी सामान्य मामलों में आप उन्हें first और count जैसे कार्यों को पारित कर सकते हैं।

+3

इस के पहले भाग सच्चे और अच्छी सलाह है, लेकिन आप पूरी तरह से एक पहले से ही करने के लिए Seqable विस्तार नहीं कर सकते परिभाषित वर्ग, क्योंकि यह एक इंटरफ़ेस है, प्रोटोकॉल नहीं। – amalloy

+0

क्या यह केवल 'java.lang.Iterable' के लिए मामला नहीं है? स्कैला संग्रह (अकेले 'विकल्प' या 'बॉक्स') को चलो, इसके बजाय' scala.collection.TraversableOnce', 'scala.collection.TraversableLike', और/या उनके subtraits में मिश्रण (या अंतर्निहित रूप से परिवर्तित किया जा रहा है) में मिश्रण नहीं करते हैं। –

+0

s/java.lang/java.util/मेरी पिछली टिप्पणी में। :/ –