मैं निम्नलिखित कोड है:स्काला - मिलान पैटर्न में एक मिलान आइटम के पद पर नियुक्ति
class Animal(hair: Option[Hair])
class Cat(var hair: Option[Hair]) extends Animal(hair)
class Dog(var hair: Option[Hair]) extends Animal(hair)
class Sheep(var hair: Option[Hair]) extends Animal(hair)
//then somewhere else:
def what(animal: Animal) {
animal match {
case Cat(hair) => println("processing cat, hair=" + hair)
case Dog(hair) => println("processing dog, hair=" + hair)
case Sheep(hair) => {
println("processing sheep, cutting hair...")
hair = None
}
}
}
प्रश्न हैं:
1) पैटर्न मिलान एक भेड़ के साथ सफल होता है, तो मैं कैसे उपयोग कर सकते हैं यह बालों है और इसे बदलो? इसने वैल के पुनर्मूल्यांकन के बारे में शिकायत की, और फिर मैंने var
को कन्स्ट्रक्टर में रखा है लेकिन अभी भी ...
2) एक और तरीका मैं सोच सकता हूं कि पूरे मिलान किए गए मान को एक चर के लिए असाइन करना है, क्या कोई तरीका है किसी मामले में कुछ केस क्लास कन्स्ट्रक्टर पैटर्न से मिलान किए गए मान को बाध्य करें?
(मुझे पता है कि मैं शायद s: Sheep
जैसे पैटर्न पर मिलान कर सकता हूं और फिर s.changeHairTo(None)
पर कॉल कर सकता हूं लेकिन यह सबसे कमजोर तरीका है)।
हालांकि यह काम करता है, मैं बेहतर विकल्प के रूप में 4e6 का पहला ब्लॉक पसंद करूंगा। आप मामले के बयान में जानते हैं कि आप 'भेड़' से निपट रहे हैं, इसलिए सभी 'पशु को म्यूटेबल बालों से निपटने के लिए कोई आवश्यकता नहीं है। आम तौर पर बोलते हुए, उत्परिवर्तन को कम करना एक अच्छी बात है, और वैकल्पिक दृष्टिकोण बिल्लियों और कुत्तों को अपरिवर्तनीय बाल भी देता है। –
मैं दोनों बिंदुओं में पूरी तरह से आपसे सहमत हूं। लेकिन उनकी बिल्ली और कुत्ते वर्गों में पहले से ही परिवर्तनीय बाल क्षेत्र हैं ;-) – drexin