/ / मैं स्कैला में सूची (अपरिवर्तनीय) में एक सदस्य कैसे जोड़ सकता हूं? [डुप्लीकेट] - स्कैला

मैं स्कैला में सूची (अपरिवर्तनीय) में सदस्य कैसे जोड़ सकता हूं? [डुप्लिकेट] - स्कैला

मैं सूची में एक सदस्य जोड़ना चाहता हूं, लेकिन सूची अपरिवर्तनीय है। मुझे बताया गया था कि स्काला अपरिवर्तनीय सूची को कई परिप्रेक्ष्य में पसंद करता है। अग्रिम धन्यवाद।

 class Family[T]{
val list: List[T] = List();
def add(member: T): Unit = { member :: this.list }
def getFamilyNames(f: T => String){
println(list.size)
list.foreach {
println
}
}
}

उत्तर:

जवाब के लिए 0 № 1

आप उत्परिवर्तित सूची कह सकते हैं ListBuffer[T] या ArrayBuffer[T]

class Family[T]{

val list = ListBuffer[T]()

def add(member: T): Unit = { this.list+=member }

def getFamilyNames(f: T => String){

println(list.size)
list.foreach {
println
}
}

}

class SomeSpecs extends FunSuite with Matchers {

test("adds value to family") {

val fam  = new Family[String]
fam.add(new String("some value"))
fam.add(new String("some other value"))

fam.list shouldBe ListBuffer("some value", "some other value")
}
}

कृपया पढ़ें किस स्केला उत्परिवर्तनीय सूची का उपयोग करना है? अधिक जानकारी के लिए।


जवाब के लिए 0 № 2

तुंहारे add विधि क्या आप उम्मीद नहीं कर रहे हैं। member :: this.list अतिरिक्त सदस्य के साथ एक नई सूची लौटाता हैउसमें जोड़ा गया। हालाँकि, आप स्पष्ट रूप से इसे वापस कर रहे हैं "वापसी मान" जो टाइप सूची [T] का है। अर्थात्, सूची में एक तत्व को शामिल नहीं किया जा रहा है, सूची में जगह को संशोधित नहीं करता है: यह सिर्फ एक नई अपरिवर्तनीय सूची देता है। आप जो चाहते हैं, वह है:

var list: List[T] = List() // this must be a var to reassign to it
...
def add(member: T): Unit = { list = member :: this.list }

आमतौर पर, हालांकि, आप बचना चाहते हैं दुष्प्रभाव, यदि आप एक कार्यात्मक दृष्टिकोण से चिपके रहना चाहते हैं।


जवाब के लिए 0 № 3

यदि आप चाहते हैं कि सब कुछ अपरिवर्तनीय हो, तो आपको परिवार का नया उदाहरण बनाना चाहिए क्योंकि अन्य मामलों में परिवार का उदाहरण परिवर्तनशील है

class Family[T](list: List[T] = List()){
def add(member: T): Unit = new Family(member :: this.list)
}

यदि परिवार एक उत्परिवर्ती संग्रह का उपयोग करने के लिए बेहतर से ज्यादा कुछ का एक बड़ा है। यदि यह एक बिल्डर नहीं है, तो कृपया इसके उपयोग की समीक्षा करें, हो सकता है कि आपको "t" विधि की आवश्यकता न हो।