2011-07-19 5 views
9

सीएलआर covariant return types या full variance (i. ई। कक्षाओं, न केवल इंटरफेस और प्रतिनिधियों के लिए लागू) का समर्थन नहीं करता है, लेकिन सीएलआर को लक्षित करने वाली भाषाएं हैं जो इनमें से एक या दोनों सुविधाओं का उपयोग करती हैं।भाषा स्कैला कैसे करें जो सीओआरआर पर चलने वाले कॉन्विएन्ट रिटर्न प्रकार और "असली" वर्ग भिन्नता की आवश्यकता है?

क्या सीएलआर के लिए इस कार्यक्षमता को सक्षम करने के लिए कुछ व्यावहारिक कामकाज है या क्या ये भाषाएं किसी प्रकार की पुनर्लेखन/मिटा/तकनीक को अपने फीचर सेट का पूरी तरह समर्थन करने के लिए करती हैं?

+0

जब आप कहते हैं कि सी ++/सीएलआई कॉन्वेंट रिटर्न प्रकारों की अनुमति देता है तो आप गलत हैं। देखें [कंपाइलर त्रुटि C2392] (http://msdn.microsoft.com/en-us/library/1z1xy8y4.aspx) –

+0

ठीक है, ठीक है। धन्यवाद! (क्या आप कॉन्वेंट रिटर्न प्रकारों के साथ एक और भाषा जानते हैं?) – soc

+0

@ एसओसी: मूल सी ++ उनका समर्थन करता है। मुझे उम्मीद है कि यह बहुत प्रासंगिक या उपयोगी नहीं है। – Puppy

उत्तर

13

संभवतः जावा जिस तरह से करता है (जावा 5 भाषा स्तर पर कॉन्वर्स रिटर्न का समर्थन करता है, लेकिन JVM इसका समर्थन नहीं करता है): कृत्रिम तरीकों को जोड़कर। यहाँ कैसे जावा यह करता है: कहते हैं कि तुम इस तरह एक वर्ग है:

class Foo implements Cloneable { 
    @Override 
    public Foo clone() { 
     // ... 
    } 
} 

परदे के पीछे, दोclone तरीकों उत्पन्न हो: public Foo clone() (जो वास्तविक कोड होता है), और public Object clone() (जो केवल परिणाम देता है पूर्व की)। बाद की विधि (जिसे संश्लेषित किया गया है) यह है कि clone विधि JVM स्तर पर ओवरराइड हो जाती है।

+0

यह संभवतः लगता है ... मुझे आश्चर्य है कि उन्होंने उस सुविधा का समर्थन करने के लिए सी # में इसका उपयोग क्यों नहीं किया था (यदि यह जितना आसान लगता है) ... – soc

+3

@soc: बस क्योंकि सी # समिति नहीं चाहता इसके बारे में चश्मा बदलने के लिए। – paradigmatic

+0

आपको इसके लिए सिंथेटिक्स की आवश्यकता क्यों है? मुझे लगता है कि एक कंपाइलर इसके बजाय एक निहित कलाकार में टॉस सकता है; ऐसा करने के लिए आवश्यक सभी जानकारी संकलन समय पर उपलब्ध है। –

संबंधित मुद्दे