2011-09-30 8 views
15

प्रकारों पर अमूर्तता व्यक्त करने के दो संभावित तरीके हैं।क्या स्केल अमूर्त प्रकार के उपयोग का उदाहरण है जो जेनेरिकों के साथ हासिल करना असंभव है?

abstract class Buffer { 
    type T 
    val element: T 
} 

बल्कि जेनेरिक, उदा।

abstract class Buffer[T] { 
    val element: T 
} 

मैं विभिन्न संदर्भों में विभिन्न दृष्टिकोणों का उपयोग करने की उपयोगिता में लाभ को समझता हूं। लेकिन मुझे उदाहरणों में रूचि है जहां सार प्रकार संस्करण को जेनेरिक संस्करण में परिवर्तित करना बिल्कुल असंभव है।

पीएस कोड स्निपेट का स्वागत है।

उत्तर

10

सार प्रकार पथ निर्भर प्रकारों से बंधे जा सकते हैं जो प्रकार पैरामीटर के साथ संभव नहीं है। इस प्रकार आप उदा। एक ठोस भीतरी वर्ग के साथ एक अमूर्त प्रकार लागू:

trait A { type T } 
class B extends A { class T } 

या स्पष्ट रूप से कक्षाओं दायरे के अंदर एक पथ निर्भर प्रकार के लिए यह बाँध:

class C { type T = this.type } 
class D { object Q; type T = Q.type } 
2
// This is possible 
trait M { type TM } 
trait P[TP] extends M { type TM = TP } 

// This is not 
trait P[TP] 
trait M extends P[TM] { type TM } 
+0

लेकिन वास्तव में मैं जेनेरिक के साथ क्या नहीं कर सकता? 1. उदाहरण आसानी से "विशेषता एम [टीएम] में परिवर्तित किया जा सकता है; विशेषता पी [टीपी] एम [टीपी] बढ़ाता है"। 2. बस संकलित करने के लिए कुछ भी संकलित नहीं करता है ... – yura

5

एक और अंतर यह: केवल टाइप मापदंडों स्वयं के रूप में इस्तेमाल किया जा सकता प्रकार,

abstract class Buffer[T] { self: T => 
    val element: T 
} 
संबंधित मुद्दे