【问题标题】:Updating a val in scala by reassigning通过重新分配更新scala中的val
【发布时间】:2018-05-02 20:37:02
【问题描述】:

我正在尝试更新存储在 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

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

任何指导将不胜感激

【问题讨论】:

  • 改用 var 吗?
  • 正如我所说,我仅限于不可变的数据结构。 Var 是可变的。
  • 我仅限于 val 和不可变数据结构
  • 你的问题没有意义。本质上,您是在说“我想改变不可变的数据。”

标签: scala immutability scala-collections


【解决方案1】:

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

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

或者使用两个 val:

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

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

顺便说一句,请注意,您不需要使用分号。事实上,它们在 Scala 中的使用有点不受欢迎。

【讨论】:

    【解决方案2】:

    在 Scala 中,我们鼓励您不要重新分配,因为它会在整个代码中产生不良副作用,并且更难推理。

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

    val x = 2; val y = 1
    

    如果您需要“变异”x,那么您可以执行以下操作:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 1970-01-01
      • 2018-06-04
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      • 2019-12-03
      • 1970-01-01
      相关资源
      最近更新 更多