के साथ नाम टकराव से बचें मैं वर्तमान में वर्तमान में केक पैटर्न का उपयोग कर रहा हूं ताकि कुछ ऑप्टिमाइज़ेशन एल्गोरिदम लागू हो सकें। मैं अक्सर नाम टकराव की समस्याओं को मारा। उदाहरण के लिए:केक पैटर्न
trait Add[T] { this: Foo[T] =>
def constant: T
def plus(t1: T, t2: T): T
def add(t: T) = plus(t, constant)
}
trait Mul[T] { this: Bar[T] =>
def constant: T
def times(t1: T, t2: T): T
def mul(t: T) = times(t, constant)
}
trait Operations[T] { this: Add[T] with Mul[T] =>
def neg(t: T): T
}
यहाँ, constant
दोनों Add
और Mul
लक्षण में परिभाषित किया गया है, लेकिन उनके मान भिन्न हो सकता है। मैं विशेषता नाम के साथ नाम उपसर्ग कर सकता हूं लेकिन मुझे यह बदसूरत और भंगुर लगता है (def mulConstant: T
)। क्या ऐसा करने का एक बेहतर तरीका है?
आपके उत्तर के लिए धन्यवाद, यह वास्तव में मेरी समस्या का समाधान करता है। अपने पीएस के संबंध में, यदि मैं प्रत्येक विशेषता में सार प्रकार 'टी' परिभाषित करता हूं (क्योंकि इसे "घटक" स्तर पर परिभाषित किया जाना चाहिए) तो मेरे पास नाम प्रकार के संघर्ष भी होंगे। क्या मै गलत हु ? – paradigmatic
इस विशेष मामले में, 'टी' का अर्थ सभी लक्षणों में एक ही "चीज़" है, इसलिए वे संघर्ष नहीं करेंगे। यहां तक कि यदि प्रत्येक विशेषता एक अलग प्रकार के साथ टी को योगदान देती है, तो वे संघर्ष नहीं करेंगे, जब वे एक साथ मिश्रित होते हैं तो उनके प्रकार की सीमाएं अलग-अलग लक्षणों से एकत्र की जाती हैं। जब तक वे बाध्य नहीं करते हैं, चीजें ठीक होती हैं (कंपाइलर के लिए)। यह एक बात है कि डैनियल स्पिवाक उस ब्लॉग पोस्ट में दिखाती है। फिर भी, मैं व्यक्तिगत रूप से "घटक" स्तर पर 'टी' की तुलना में एक अधिक वर्णनात्मक नाम पर एक सार प्रकार देता हूं, क्योंकि 2 'टी का मतलब 2 अलग-अलग घटकों में एक ही चीज़ का जरूरी नहीं है। –
ठीक है। लेकिन यहां मुझे यह सुनिश्चित करने की ज़रूरत है कि प्रकार एकजुट होते हैं ('टाइप टी = इंट' हर जगह), इसलिए मुझे निर्भरता व्यक्त करने की आवश्यकता है कि मिश्रित सभी लक्षणों में समान 'टी' है। मैं नहीं देखता कि जेनेरिक प्रकारों को छोड़कर इसे कैसे प्राप्त किया जाए। – paradigmatic