相关疑难解决方法(0)

Scala中不可变值的可变字段

考虑一个简单的类和一个(不可变的)值实例:

class MyClass (var m: Int) {}

val x : MyClass = new MyClass(3)
Run Code Online (Sandbox Code Playgroud)

由于m被声明为变量(var),因此m为mutable。但是,由于x被声明为值,因此它是不可变的。那么是x.m可变的还是不变的?

scala immutability

2
推荐指数
1
解决办法
90
查看次数

在for循环中赋值var arraybuffer:"重新分配给val"

如标题中所述,我无法Arraybuffer(Arraybuffer(Int,Int),Int)在for中重新分配类型的变量loop:

var ab1 = ArrayBuffer(le4: _*)
var ab2 = ab1 map (ligne => (ArrayBuffer(ligne._1: _*), ligne._2))
println("ab:" + ab2)

for {
    i <- 1 to ab2.length
    j <- 0 to i
} {
    ab2(i)._1(j)._2 = j match {
        case 0 =>  ab2(i - 1)._1(0)._2 + ab2(i)._1(j)._1
        case i =>  ab2(i - 1)._1(j - 1)._2 + ab2(i)._1(j)._1
        case _ =>  ab2(i - 1)._1(j)._2 + ab2(i - 1)._1(j - 1)._1 + ab2(i)._1(j)._1
    }
}
Run Code Online (Sandbox Code Playgroud)

关键点是ab2声明为var但是其中的Int的更改被拒绝.为什么?

for-loop scala

1
推荐指数
1
解决办法
514
查看次数

当我们可以在地图或列表中添加或删除元素时,它们如何不可变?

以下是声明不可变Map的Scala代码

var m:Map[Int,String] = Map(1->"hi",2->"hello")
println(m)
// Result: Map(1->"hi",2->"hello")
Run Code Online (Sandbox Code Playgroud)

在这里,我们能够添加或更改Map的内容,那么我们如何说scala中的map或list是不可变的

m=m+(3->"hey") 
println(m)
// Result: Map(1->"hi",2->"hello",3->"hey")**
Run Code Online (Sandbox Code Playgroud)

scala immutable-collections

1
推荐指数
1
解决办法
80
查看次数

'val'会产生可变数据吗?

在REPL中我们输入以下命令

scala> val p = 1 << 1
p: Int = 2
Run Code Online (Sandbox Code Playgroud)

再次

scala> val p = 1 << 2
p: Int = 4
Run Code Online (Sandbox Code Playgroud)

我的问题是,我读到val是不可变的.但在这种情况下,价值正在改变.那么有人可以告诉我为什么.这真的是变异的一个例子.请帮忙

scala

-1
推荐指数
1
解决办法
61
查看次数