मैं केस ऑब्जेक्ट्स प्रकारों को अमूर्त प्रकारों के रूप में उपयोग करने की कोशिश कर रहा हूं। मैं देख कर हैरान था (समान) नीचे दिए गए कोड को संकलित करता है:अमूर्त प्रकार को प्रकारबद्ध प्रकार के साथ कैसे ठोस रूप से सेट किया जाए?
sealed abstract class Bar
case object BarOne extends Bar
case object BarTwo extends Bar
sealed abstract class Foo {
type A <: Bar
def f: A
}
object Foo {
object FooOne extends Foo {
type A = BarOne.type
val f = BarTwo
}
object FooTwo extends Foo {
type A = BarTwo.type
val f = BarOne
}
}
मेरा असली उदाहरण Foo
में parametrized और एक मामले वर्ग के रूप में प्रयोग किया जाता है। तो मैं सिर्फ A
एक प्रकार पैरामीटर नहीं बना सकता।
f = BarTwo
संकलित करता है, जब A
BarOne.type
होने के लिए सेट किया गया है?
में A
A <: Bar
के रूप में व्याख्या किया गया है, ऐसा क्यों है?
Foo
के प्रत्येक ऑब्जेक्ट उदाहरण के लिए A
को ठोस रूप से सेट करने का कोई तरीका है?
मैं स्कैला 2.11.8 का उपयोग कर रहा हूं।
अद्यतन: जब मैं में FooOne
& FooTwo
संकलन def attributeType = ...
साथ val attributeType = ...
की जगह विफल रहता है (उम्मीद है)।
लापता '' FooOne' पर Foo' प्रदान करता है और 'एक टाइपो FooTwo' है? क्योंकि यदि आप इसे जोड़ते हैं तो यह संकलित नहीं होता है। –
@EndeNeu यह एक निरीक्षण था। और आप सही हैं, यह संकलित नहीं है (अपेक्षित के रूप में)। मैंने वास्तविक कोड को यथासंभव करीब के रूप में देखने के लिए प्रश्न अपडेट किया है। बेशक इसका कोई उपयोग नहीं है क्योंकि ऊपर दिया गया कोड संकलित नहीं करता है और मेरा कोड संकलित करता है। – muhuk
@muhuk अगर उपरोक्त कोड संकलित नहीं करता है तो यह आपके संकलन कोड का प्रतिनिधित्व नहीं करता है। यह प्रश्न तब तक उत्तरदायी नहीं है जब तक आपको सही न्यूनतम उदाहरण न मिल जाए। – Daenyth