2011-03-23 22 views
6

क्या एक्शनस्क्रिप्ट में कई आधार प्रकारों के साथ दृढ़ता से टाइप की गई सूची को संभालने का कोई तरीका है?एक्शनस्क्रिप्ट (वेक्टर <T,T>) में कई आधार प्रकारों के साथ मजबूत टाइप किया गया संग्रह?

मैं वास्तव में Vector<T,T> जैसे कुछ ढूंढ रहा हूं?

क्या यह संभव है?

या ऐसा करने का एकमात्र तरीका है अपनी खुद की कक्षा बनाना जो स्वीकार करता है कि String और Number कन्स्ट्रक्टर में कहें और उस कक्षा से Vector<T> बनाएं?

उत्तर

1

नहीं, मानक द्वारा नहीं। यदि आइटम प्राइमेटिव प्रकारों में से एक नहीं हैं तो आप इंटरफेस, या सुपर क्लासेस का वेक्टर बना सकते हैं। उदाहरण के लिए, DisplayObjects का एक वेक्टर जिसमें मूवीक्लिप्स और स्प्राइट्स का मिश्रण होता है (जो दोनों प्रदर्शन ऑब्जेक्ट से प्राप्त होते हैं)।

उदाहरण के लिए:

var v:Vector.<DisplayObject> = new <DisplayObject>[ 
    new MovieClip(), 
    new Sprite(), 
    new MovieClip() 
]; 

trace(v[0].alpha); // outputs 1 
trace(v[0].currentFrame); // error - not a DisplayObject property 

इस मामले वैक्टर आइटम केवल गुण और स्वयं का तरीकों कि वेक्टर प्रकार से स्टेम का पर्दाफाश होगा। लेकिन यही कारण है कि आपको वैक्टर का उपयोग करना चाहिए, यह आपके द्वारा प्रबंधित किए जा रहे आइटम प्रकारों को सुनिश्चित करता है।

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

class Wrapper { 
    public var _value:*; // should be private with get/set's 

    public function Wrapper(value:*) { 
     if(value is String || value is Number) { 
      _value = value; 
     } 
    } 
} 
0

आप ऐसा नहीं कर सकते, तो मैं अपने सुझाव, एक विशेष दो गुणों से युक्त वर्ग बनाने के लिए है, जिसके साथ जाना होगा (कहते हैं कि संख्या, स्ट्रिंग) और इस बात का एक वेक्टर पैदा करते हैं।