मैं स्काला में पुस्तक प्रोग्रामिंग की धारा 20.7 पढ़ रहा था और यही कारण है, जबकि इस कोड को संकलित करता है मैं सोच रहा था:स्काला प्रकार: क्लास ए टी जहां टी है के बराबर नहीं है: प्रकार टी = एक
class Food
class Fish extends Food
class Grass extends Food
abstract class Animal {
type SuitableFood <: Food
def eat(food: SuitableFood)
}
class Cow extends Animal {
type SuitableFood = Grass
override def eat(food: Grass) {}
}
val bessy: Animal = new Cow
bessy eat (new bessy.SuitableFood)
इस कोड ऐसा नहीं करता (कोड के बाकी, पहले की तरह ही केवल अंतिम पंक्ति परिवर्तन है):
bessy eat (new Grass)
और जहाँ तक मैं समझता हूँ कि घास के प्रकार Cow.SuitableFood की ही है। -> घास के बजाय एक प्रकार का खाद्य
bessy प्रकार पशु का है, तो कैसे संकलक पता कर सकते हैं कि यह एक प्रकार SuitableFood की जरूरत है:
इसके अलावा, मैं इस उदाहरण के बारे में एक और सवाल है? 'एक नया खाद्य प्रदान करने के लिए कोशिश कर रहा है कारण मुझे प्रकार मेल नहीं खाता का एक संकलन त्रुटि देता है, लेकिन वर्ग पशु एक प्रकार खाद्य की जरूरत है और bessy के प्रकार स्पष्ट रूप से परिभाषित किया गया है: पशु
सुझाव: इस प्रश्न में टैग _path-dependent-type_ जोड़ें। यह किसी ऐसे व्यक्ति से उत्तर आकर्षित कर सकता है जो वास्तव में इस तरह की कठिनाई के बारे में और जानता है। (मैं अभी भी पथ-निर्भर प्रकारों के साथ संघर्ष कर रहा हूं।) –
@BenKovitz जोड़ा गया, धन्यवाद। – vicaba