kni*_*ttl 10 scala function idiomatic immutability
在Scala 中使用defvs. val来定义一个常量的不可变值有什么含义?我显然可以写下面的内容:
val x = 3;
def y = 4;
var a = x + y; // 7
Run Code Online (Sandbox Code Playgroud)
这两个陈述之间有什么区别?哪一个表现更好/是推荐的方式/更惯用?我何时会使用一个而不是另一个?
Lui*_*hys 11
假设这些是类级声明:
编译器将创建一个val final,这可以导致VM更好地优化代码.
A def不会将值存储在对象实例中,因此会节省内存,但每次都需要对方法进行评估.
为了两全其美,请创建一个伴随对象并在val那里声明常量.
即代替
class Foo {
val MyConstant = 42
}
Run Code Online (Sandbox Code Playgroud)
这个:
class Foo {}
object Foo {
val MyConstant = 42
}
Run Code Online (Sandbox Code Playgroud)