2012-10-26 32 views
14

क्या मैं स्कैला में प्राइमेटिव का उपयोग कर सकता हूं?मैं स्कैला में प्राइमेटिव का उपयोग कैसे कर सकता हूं?

उपयोग का मामला अरबों स्याही भंडारण के लिए है, इसलिए 4 बाइट्स (एक int के लिए) और 16 बाइट्स (एक इंटीजर के लिए) के बीच का अंतर महत्वपूर्ण है।

+6

स्कैला प्राइमेटिव्स को संकलित करता है जब यह कर सकता है (ऐरे [इंट] => int [] आदि) – Arjan

+0

यदि आपके पास सचमुच अरबों चींटियां हैं, तो आप प्राइमेटिव्स के साथ-साथ आकार का उपयोग करते हुए भी स्मृति समस्याओं में भाग ले सकते हैं एरे के तत्वों को अर्थात् ~ 2 बीएन elems के लिए एक int ref की आवश्यकता के द्वारा jVM पर सीमित है। या तो अपने डेटा स्ट्रीमिंग या डेटाबेस का उपयोग करने के बारे में सोचें। –

उत्तर

14

आप स्काला अनबॉक्स्ड पुरातन संग्रहीत करना चाहते हैं, तो आप Array[Int] का उपयोग, लेकिन उस पर किसी भी शांत स्काला संग्रहण विधि (क्योंकि यह मुक्केबाजी के लिए बाध्य करेगा) का उपयोग करने से बचना सकता है।

यदि आप प्राइमेटिव प्रकारों के अपरिवर्तनीय संग्रह की तलाश करते हैं, तो आप Debox पर एक नज़र डाल सकते हैं, जो विशेष बफर, सेट और मैप्स प्रदान करता है। परियोजना अभी भी विकसित हो रही है लेकिन यह बहुत ही आशाजनक है।

+0

मुझे नहीं लगता कि कॉलिंग डीबॉक्स कंटेनर अपरिवर्तनीय सही है। हालांकि, डेबेल स्केल म्यूटेबल की विशेषताएं प्रदान करने के लिए कड़ी मेहनत करता है। बफर, मानचित्र और सेट (उदाहरण के लिए ऑटोग्राइंग), अच्छा प्रदर्शन और विशेष रूप से मुक्केबाजी के बिना। –

12

आप संकलक को आपके लिए कक्षा के विशेष उदाहरण बनाने के लिए @specialised एनोटेशन का उपयोग कर सकते हैं। this article देखें।

class Container[@specialized(Int) T](value: T) { 
    def apply(): T = value 
} 
संबंधित मुद्दे