2014-06-08 8 views
14

मेरे पास 2 स्ट्रिंग सदस्यों के साथ केस क्लास है। मैं बाद में दूसरे सदस्य को अपडेट करना चाहता हूं, इसलिए पहले मैं स्ट्रिंग और कोई नहीं के साथ एक उदाहरण बना सकता हूं और बाद में मैं कक्षा में डेटा लोड करता हूं और दूसरे सदस्य को कुछ मूल्य के साथ अपडेट करना चाहता हूं।स्कैला केस क्लास अपडेट वैल्यू

मैं यह कैसे कर सकता हूं?

+0

क्या आपने केस कक्षाओं के बारे में पढ़ा है? क्या आपने कुछ लिखने की कोशिश की है? – vptheron

+1

अधिकतर डुप्लिकेट http://stackoverflow.com/q/7249396/298389 –

उत्तर

38

मामले वर्ग को परिभाषित करें ताकि दूसरे सदस्य है एक var:

case class Stuff(name: String, var value: Option[String]) 

अब आप Stuff का एक उदाहरण बना सकते हैं और संशोधित दूसरा मूल्य:

val s = Stuff("bashan", None) 

s.value = Some("hello") 

हालांकि, मामले कक्षाएं बनाने उत्परिवर्तनीय शायद एक अच्छा विचार नहीं है। आपको अपरिवर्तनीय डेटा संरचनाओं के साथ काम करना पसंद करना चाहिए। एक परिवर्तनीय केस क्लास बनाने के बजाय, इसे अपरिवर्तनीय बनाएं, और संशोधित मानों के साथ एक नया उदाहरण बनाने के लिए copy विधि का उपयोग करें। उदाहरण के लिए:

// Immutable Stuff 
case class Stuff(name: String, value: Option[String]) 

val s1 = Stuff("bashan", None) 

val s2 = s1.copy(value = Some("hello")) 
// s2 is now: Stuff("bashan", Some("hello")) 
+10

अपरिवर्तनीय केस कक्षाओं को काम करते समय मुझे काफी उपयोगी लगता है, जो आमतौर पर संशोधित मानों के लिए 'withXYZ' विधियों की एक श्रृंखला पेश करना है। अर्थात। 'def withValue (v: स्ट्रिंग) जोड़ना: सामग्री = प्रतिलिपि (मान = कुछ (v)) 'to' Stuff' कक्षा परिभाषा आपको निम्न प्रकार से संशोधित प्रतिलिपि बनाने की अनुमति देगी' s1.withValue ("हैलो") ' –

1

स्कैला में केस क्लास अधिमानतः अपरिवर्तनीय हैं। आप जो हासिल करने का प्रयास कर रहे हैं उसके लिए एक नियमित कक्षा का उपयोग करें, या अपने केस क्लास ऑब्जेक्ट को अद्यतन मूल्य के साथ एक नए पर कॉपी करें।

+0

केस क्लास हमेशा अपरिवर्तनीय नहीं होते हैं। – Jesper

संबंधित मुद्दे