Scala中的var和val定义有什么区别?为什么这两种定义都需要?为什么你会选择val而不是var,反之亦然?
当前回答
在javascript方面,它与
val -> const 是 -> 是
其他回答
Val值是类型存储常量。一旦创建它的价值不能重新分配。可以用关键字val定义一个新值。
如。val x: Int = 5
这里type是可选的,因为scala可以从赋值推断它。
变量是类型化的存储单元,只要保留内存空间,就可以再次为其赋值。
如。var x: Int = 5
一旦不再需要存储在这两个存储单元中的数据,JVM就会自动取消对它们的分配。
在scala中,值比变量更受欢迎,因为它们给代码带来了稳定性,尤其是在并发和多线程代码中。
Val是最终值,即不能设置。在java中考虑final。
从c++的角度思考,
val x: T
是否类似于指向非常量数据的常量指针
T* const x;
而
var x: T
类似于指向非常量数据的非常量指针吗
T* x;
偏好val而不是var增加了代码库的不可变性,这有助于它的正确性、并发性和可理解性。
要理解常量指针指向非常量数据的含义,请考虑以下Scala代码片段:
val m = scala.collection.mutable.Map(1 -> "picard")
m // res0: scala.collection.mutable.Map[Int,String] = HashMap(1 -> picard)
这里的“指针”val m是常量,所以我们不能将它重新赋值为指向其他东西
m = n // error: reassignment to val
但是我们确实可以改变m指向的非常数数据本身
m.put(2, "worf")
m // res1: scala.collection.mutable.Map[Int,String] = HashMap(1 -> picard, 2 -> worf)
val表示不可变,var表示可变
解释一下,“val表示值,var表示变量”。
A distinction that happens to be extremely important in computing (because those two concepts define the very essence of what programming is all about), and that OO has managed to blur almost completely, because in OO, the only axiom is that "everything is an object". And that as a consequence, lots of programmers these days tend not to understand/appreciate/recognize, because they have been brainwashed into "thinking the OO way" exclusively. Often leading to variable/mutable objects being used like everywhere, when value/immutable objects might/would often have been better.
Val表示最终值,不能重新赋值
而Var可以在以后重新分配。
推荐文章
- 什么时候我应该在Scala中选择向量?
- 在Scala中,foldLeft和reducleft的区别
- 好的scalaz介绍
- Akka Kill vs Stop vs Poison Pill?
- 如何开始与Akka流?
- Scala 2.8 breakOut
- 如何克隆一个案例类实例,只改变一个字段在Scala?
- ':_* '(冒号下划线*)在Scala中有什么作用?
- 定义一个函数时,“def”和“val”有什么区别
- 在Scala中获取列表中的项目?
- case对象和对象的区别
- Scala中的Case对象与枚举
- 任务不可序列化:java.io.NotSerializableException,当只对类而不是对象调用闭包外部的函数时
- 在Scala中将一个元素附加到列表的末尾
- 在Scala中按名称调用vs按值调用,需要澄清