2009-05-29 18 views

उत्तर

182
  1. मिक्सिन्स में राज्य हो सकता है, (पारंपरिक) लक्षण नहीं हैं।
  2. mixins "अंतर्निहित संघर्ष समाधान" का उपयोग, लक्षण "स्पष्ट संघर्ष समाधान"
  3. mixins linearization पर निर्भर करता है का उपयोग करें, लक्षण चपटा कर रहे हैं।

Lecture about traits

विज्ञापन 1. mixins आप उदाहरण वैरिएबल निर्धारित कर सकते हैं। लक्षण इस अनुमति नहीं देते हैं। राज्य कक्षा (= कक्षाओं का उपयोग कर कक्षा) लिखकर प्रदान किया जाना चाहिए

विज्ञापन 2. नाम विवाद हो सकता है। दो mixins (MA और MB) या लक्षण (TA और TB) एक ही परिभाषा foo():void साथ विधि परिभाषित करते हैं।

Mixin MA { 
    foo():void { 
     print 'hello' 
    } 
} 

Mixin MB { 
    foo():void { 
     print 'bye' 
    } 
} 

Trait TA { 
    foo():void { 
     print 'hello' 
    } 
} 

Trait TB { 
    foo():void { 
     print 'bye' 
    } 
} 

mixins में वर्ग C mixins MA, MB रचना में संघर्ष परोक्ष हल कर रहे हैं।

Class C mixins MA, MB { 
    bar():void { 
     foo(); 
    } 
} 

यह लक्षण का उपयोग करते समय, रचना वर्ग संघर्ष को सुलझाने के लिए है दूसरी ओर से MA

foo():void कॉल करेंगे।

Class C mixins TA, TB { 
    bar():void { 
     foo(); 
    } 
} 

यह कोड संघर्ष बढ़ाएगा (foo():void की दो परिभाषाएं)।

विज्ञापन 3. एक विधि है कि क्या यह एक विशेषता में या एक वर्ग विशेषता का उपयोग करता है में परिभाषित किया गया है की निर्भर नहीं करता है के शब्दों।

दूसरे शब्दों में, इससे कोई फर्क नहीं पड़ता कि वर्ग में ट्रैट्स या ट्रेट्स कोड शामिल हैं, कक्षा में "कॉपी - पेस्ट" है।

+9

+1 मुझे आपका उत्तर बहुत पसंद आया। यह संक्षेप में था और दोनों के बीच अंतर स्पष्ट रूप से वर्णित था। धन्यवाद! – Tower

+1

यदि अनुकरणीय प्रतिक्रियाओं की एक सूची थी, तो यह निश्चित रूप से इस पर होगा। धन्यवाद, जेके_। – Reece

+5

मुझे पता है कि यह एक साल पुरानी तारीख है, लेकिन भविष्य के पाठकों के लिए, रूबी में यह विधि का उपयोग करेगा जो कि आखिरी मॉड्यूल को मिश्रित किया गया था, इसलिए यह फू() फॉर्म को कॉल करेगा() फॉर्म एमबी –

7

इन पृष्ठों डी प्रोग्रामिंग भाषा में अंतर की व्याख्या। इस संदर्भ में

http://dlang.org/mixin.html

http://dlang.org/traits.html

mixins जेनरेट कर दिए कोड हैं, और फिर संकलन के दौरान कोड में उस बिंदु पर डाला। सरल डीएसएल के लिए काफी आसान है।

लक्षण संकलित-समय बाहरी मान हैं (बाहरी स्रोत से उत्पन्न कोड के बजाए)। अंतर सूक्ष्म है। मिक्सिन तर्क जोड़ते हैं, लक्षण डेटा संकलन-समय प्रकार की जानकारी जैसे डेटा जोड़ते हैं।

रूबी के बारे में ज्यादा पता नहीं है, लेकिन उम्मीद है कि यह कुछ हद तक मदद करता है।

+35

डी में मिक्सिन और लक्षण आमतौर पर कंप्यूटर विज्ञान में शब्दों का क्या अर्थ है उससे अलग हैं। डी में, स्वचालित कोड पीढ़ी के लिए प्रीप्रोसेसर प्राइमेटिव दोनों हैं। अन्य भाषाओं में, वे विरासत तंत्र हैं। डी में नामकरण निर्णय दुर्भाग्यपूर्ण है। – tylerl