首页 > 解决方案 > Scala List take() 方法如何更改 val 类型?

问题描述

take()我刚刚发现String 中的方法有一个奇怪的行为。

这是我的代码:

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,238,2321

我预计它会ji保持其价值,但它似乎也受到了影响t。我想创建一个新的ji然后更改为t无需触摸ji。但是,我不想做ji多余的。

标签: stringscalamethodstake

解决方案


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

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

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

i = i + 8- 避免可变性。此外,i是 aString并且8是整数。不要这样做。

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

t(1)= i-- 您在这里更改数组元素(如所写,t并且ji相同的数组)。不要这样做。

底线:

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

这可以满足您的要求:ji并且t是两个数组,它们的第二个元素不同。


推荐阅读