Scala List take() 方法如何更改 val 类型?

问题描述

我刚刚在字符串中使用 take() 方法发现了一个奇怪的行为。

这是我的代码

val ji = Array("134","231","2321")
var t = ji
var i = ji(1).take(2)
i = i + 8
t(1)= i
println(ji.mkString(",")) //134,238,2321
println(t.mkString(","))  //134,2321

我预计 ji 会保持其值,但它似乎与 t 一样受到影响。我想创建一个新的 ji,然后在不触及 t 的情况下更改为 ji。但是,我不想让 ji 变得多余。

解决方法

val ji = Array("134","231","2321") - 好的,ji 是一个字符串数组。

var t = ji -- 不需要这个。避免使用 vars

var i = ji(1).take(2) -- 也不需要这个

i = i + 8 - 避免可变性。此外,i 是一个 String,而 8 是一个整数。不要这样做。

上面两行应该改写为 val i = ji(1).take(2) + "8"

t(1)= i -- 您正在此处更改数组元素(如所写,tji相同的数组)。不要这样做。

底线:

   val ji = Array("134","2321")
   val t = ji.updated(1,ji(1).take(2) + "8")

这就是你想要的:jit 是两个数组,它们的第二个元素不同。