不可变标签vs val对方法的返回类型有什么影响吗?

Jam*_*zba 1 scala immutability

标题解释了这个问题,这是一个代码示例:

def foo(): String = {
    var result: String = new String()
    result
}

def bar(): String = {
    val result = new String()
    result
}
Run Code Online (Sandbox Code Playgroud)

var与val只对方法范围内的变量产生影响吗?或者返回类型是否隐含地保持不变性/可变性状态?例如,bar()的返回类型仍然是不可变的吗?

原谅我的无知,我对斯卡拉完全不熟悉.

Nat*_*hes 6

两种方法的返回类型是String.返回的值是来自val还是var是无关紧要的,它们都返回一个String.val或var在本地范围内,它不是被关闭的东西,并且一旦方法调用结束它就不再存在.Scala的目标之一就是拥有强大的输入,因此您可以将功能链接在一起并且有信心,如果它编译它可能实际上有效; 如果一个方法的内部实现发挥到你必须如何处理它的返回值,这将会崩溃.

对象本身是否可变取决于对象的实现方式,而不是对象的引用方式.String是不可变的,因为它的设计者确保无法修改其内部状态.var仅表示该变量允许将引用换出另一个.

关于不变性的Java语言讨论或参考是什么也适用于Scala.