var immutable
बनाम val mutable
इस सवाल का जवाब कई उत्कृष्ट के अलावा। यहां एक साधारण उदाहरण है, जो val mutable
के संभावित खतरों को दर्शाता है:
उत्परिवर्तनीय वस्तुओं को विधियों के अंदर संशोधित किया जा सकता है, जो उन्हें पैरामीटर के रूप में लेते हैं, जबकि पुन: असाइनमेंट की अनुमति नहीं है।
import scala.collection.mutable.ArrayBuffer
object MyObject {
def main(args: Array[String]) {
val a = ArrayBuffer(1,2,3,4)
silly(a)
println(a) // a has been modified here
}
def silly(a: ArrayBuffer[Int]): Unit = {
a += 10
println(s"length: ${a.length}")
}
}
परिणाम:
length: 5
ArrayBuffer(1, 2, 3, 4, 10)
कुछ इस तरह, var immutable
साथ ऐसा नहीं हो सकता क्योंकि रीअसाइनमेंट अनुमति नहीं है:
में
object MyObject {
def main(args: Array[String]) {
var v = Vector(1,2,3,4)
silly(v)
println(v)
}
def silly(v: Vector[Int]): Unit = {
v = v :+ 10 // This line is not valid
println(s"length of v: ${v.length}")
}
}
परिणाम:
error: reassignment to val
समारोह paramet के बाद से ers को val
के रूप में माना जाता है इस पुन: असाइनमेंट की अनुमति नहीं है।
उदाहरण के लिए देखें http://stackoverflow.com/questions/10999024/scala-var-list-vs-val-mutablelist/11002321#11002321 –