को देखते हुए Parent
का एक सरल बीजीय डेटा प्रकार:अप्रत्याशित विशेषता व्यवहार
scala> sealed trait Parent
defined trait Parent
scala> case object Boy extends Parent
defined object Boy
scala> case object Girl extends Parent
defined object Girl
मैं एक विशेषता परिभाषित: फिर
scala> trait HasGirl {
| val x: Girl.type
| }
defined trait HasGirl
, मैं एक मामले वर्ग कि HasGirl
कार्यान्वित बनाया है, लेकिन एक x
मूल्य प्रदान की Boy.type
का।
scala> case class Thing(x: Boy.type) extends HasGirl
defined class Thing
मैं एक संकलन समय त्रुटि की उम्मीद थी, के बाद से मैं नहीं दिख रहा है कि कैसे प्रकार Boy.type
के x
val x: Girl.type
के अनुरूप है।
यहां क्या हो रहा है?
'Thing' में' x' है:
अगर मैं एक सदस्य जोड़ने के लिए, आप एक संकलन समय त्रुटि मिलती है: उदाहरण के लिए, निम्नलिखित एक रनटाइम त्रुटि पैदा करता है विशेषता में 'x' से संबंधित? –
खैर, 'थिंग' 'HasGirl' बढ़ाता है। चूंकि बाद वाले ''™' प्रकार' Girl.type' की अपेक्षा करता है, मैं * विश्वास करता हूं * कि 'थिंग' का' x: Boy.type' मानचित्र 'HasGirl'' x' पर है। –
दरअसल, 'थिंग (बॉय) .asInstanceOf [HasGirl] .x'' java.lang.ClassCastException का उत्पादन करता है: लड़का $ $ Girl को नहीं डाला जा सकता है। दिलचस्प। – ale64bit