通过重新分配更新 scala 中的 val

Updating a val in scala by reassigning

我正在尝试更新存储在 scala 中的 val 中的值。我知道我不能直接这样做:val x = 2; x = 1。这不是我正在做的,因为我知道你不能重新分配给一个 val。这就是我想要做的:

    val fp = List((1,2));
    val fp = fp ::: List((1,3)); //hoping that x is List((1,2),(1,3))

但我收到一条消息说:

 error: recursive value fp needs type

另请注意,我仅限于使用不可变数据结构和值。

任何指导将不胜感激

您不能在 Scala 中重新分配 val。您应该使用 var:

var fp = List((1,2))
fp = fp ::: List((1,3))

或者使用两个值:

val fp = List((1,2))
val fp2 = fp ::: List((1,3))

通常你应该尽可能避免使用变量。它使您的程序更干净,并且这种方式肯定更实用。所以,我更喜欢带有两个值的第二个选项。

顺便说一句,请注意,您不需要使用分号。事实上,他们在 Scala 中的使用有点令人沮丧。

在 Scala 中,我们鼓励您不要重新分配,因为它会在您的代码中产生不良的副作用,并使推理变得更加困难。

您需要养成丢弃变量及其突变并开始考虑表达式的 绑定 的习惯。 Var 在 Scala 中被认为是错误的形式。重新分配也是如此。以下完全符合您的要求,没有任何不需要的副作用 vars 和突变会产生:

val x = 2; val y = 1

如果您需要 "mutate" x,那么您可以执行以下操作:

val x = 2
val y = x + 2 // x = 2, y = 4

所以你想从 fp 得到的东西看起来像这样:

val fp = List((1,2));
val fp1 = fp ::: List((1,3));