निम्नलिखित स्काला घोषणाओं ठीक कर रहे हैं:स्कैला जेनरिक: इंटरेबल के अनुरूप नहीं है?
trait Base[B <: Base[B,M,ID], M <: Meta[B,M,ID], ID <: Comparable[ID]] {
// ...
}
trait Meta[B <: Base[B,M,ID], M <: Meta[B,M,ID], ID <: Comparable[ID]] extends Ordered[Meta[_,_,_]] {
// ...
}
trait BaseWithID[B <: BaseWithID[B,M,ID], M <: Meta[B,M,ID], ID <: Comparable[ID]] extends Base[B,M,ID] with Ordered[B] {
// ...
}
trait BaseWithIntID[B <: BaseWithIntID[B,M,ID], M <: MetaWithIntID[B,M,ID], ID <: Comparable[ID]] extends BaseWithID[B,M,ID] {
// ...
}
trait MetaWithIntID[B <: BaseWithIntID[B,M,ID], M <: MetaWithIntID[B,M,ID], ID <: Comparable[ID]] extends Meta[B,M,ID] {
// ...
}
लेकिन निम्न दो नहीं हैं:
trait BaseWithIntID[B <: BaseWithIntID[B,M], M <: MetaWithIntID[B,M]] extends BaseWithID[B,M,Int] {
// ...
}
trait MetaWithIntID[B <: BaseWithIntID[B,M], M <: MetaWithIntID[B,M]] extends Meta[B,M,Int] {
// ...
}
अंतर यह है कि मैं BaseWithIntID और MetaWithIntID में आईडी प्रकार पैरामीटर हटा दिया, और इंट निर्दिष्ट स्पष्ट रूप में है उनके संबंधित आधार लक्षण। लेकिन यह संकलित नहीं करता है, तो क्या इसका मतलब यह है कि Intala Scala में तुलनात्मक नहीं है? यदि यह है, तो मैं क्या गलत कर रहा हूँ? मैंने तुलनात्मक के बजाय ऑर्डर किया, और इससे कोई फर्क नहीं पड़ता।
मैं ग्रहण का उपयोग कर रहा है, और हमेशा की तरह, त्रुटि संदेश बेकार कर रहे हैं:
type arguments [B,M,Int] do not conform to trait BaseWithID's type parameter bounds [B <: BaseWithID[B,M,ID],M <: Meta[B,M,ID],ID <: java.lang.Comparable[ID]]
यह सिर्फ का कहना है कि कुछ गलत हो रहा है, लेकिन नहीं है जो प्रकार पैरामीटर गलत है, और क्यों। this question पर देखकर, मैंने सोचा कि मैं इसके बजाय "आईडी <% तुलनात्मक [आईडी]" कोशिश कर सकता हूं, लेकिन यह एक विशेषता घोषणा में कानूनी नहीं है।
वास्तव में, यह या तो काम नहीं करता है (एक ही त्रुटि संदेश के साथ):
trait TestBase extends BaseWithID[TestBase,TestMeta,Int]
trait TestMeta extends Meta[TestBase,TestMeta,Int]
'आईडी <% तुलनात्मक [आईडी] 'के साथ समस्या यह है कि यह स्वचालित रूप से एक अंतर्निहित पैरामीटर को परिभाषित करता है। चूंकि लक्षणों को पैरामीटर रखने की अनुमति नहीं है, इसलिए यह काम नहीं करेगा। एक 'वर्ग' के रूप में, हालांकि, आप इसे कर सकते हैं। –