【问题标题】:Swap out "var" from Scala code and use "val" instead of "var"从 Scala 代码中换出“var”并使用“val”而不是“var”
【发布时间】:2016-12-06 06:57:42
【问题描述】:

我是 Scala 的新手,不知道如何换出 vars 并在代码中使用 vals。代码中有很多变量。

下面只是一段代码:

var fa = new JsArray

val ra = Json.obj("key1" -> val1, "key2" -> val2, "key3" -> val3)

fa = fa.:+(ra)

val 怎么用?

第二种情况:

val a = 10
var dr: String = ""
if (a == 10) {
    dr = "true"
}
else {
    dr = "false"
}
println("dr: " + dr)

在这里,如果我将 val for "dr" 放在 if/else 中,则它无法在 println() 中访问。 有什么帮助可以避免 var 吗?

【问题讨论】:

  • var = 变量 val = 变量 + 最终
  • val fa = (new JsArray) :+ ra

标签: scala immutability var


【解决方案1】:

在 Scala 中,if/else 是一个返回值的表达式。

val dr = if (condition) value1 else value2

【讨论】:

    【解决方案2】:

    模式匹配是使dr 成为val 的好选择,尤其是当您需要测试a 的多个不同值时。

    val a = 10
    
    val dr = a match {
      case 10 => true
      case _ => false
    }
    
    print(dr)
    

    case 10 => true 这实质上是说“如果 a 匹配 10,然后将 true 分配给 dr"
    case _ = false 这表示“如果没有上述情况( s) 匹配 a 然后将 false 分配给 dr"

    请注意,dr 将是上述示例中的Boolean 类型,这比使用String 表示真/假要好得多。如果您出于某种原因确实需要一个字符串,那么您会这样做。

    val dr = a match {
      case 10 => "true"
      case _ => "false"
    }
    
    print(dr)
    

    【讨论】:

    • 有什么可以代替 "var" 的吗?我认为,“var”在 Scala 中不好用。
    • 现在上面的例子中没有vars。一般来说,可变变量有一些用例,但您应该尽可能远离它们。看到dr 在模式匹配中是val 而不是var
    • 是的。我有。我需要更多地了解可变变量吗?有什么帮助吗?
    • 只要 google scala val vs var,你就会发现 1000 篇关于这个主题的文章。从这里开始也许可以快速阅读 - stackoverflow.com/questions/1791408/…
    • 或者直接写:val dr = a == 10.
    【解决方案3】:

    如果您使用 val,则不允许为其分配新值,因此在上面的代码示例中,如果您使用

    切换第三行
    val fa2 = fa.:+(ra)
    

    那么 fa 可以是一个 val。

    【讨论】:

      【解决方案4】:

      模式匹配可能是这种情况下最好的风格,但如果你想要if else,你可以这样写。请注意,在 Scala 中,当评估 if 语句时,它会像任何其他代码块一样返回结果。

      val a = 10
      val dr = if (a == 10) {
         "true"
      }
      else {
          "false"
      }
      println("dr: " + dr)
      

      【讨论】:

        【解决方案5】:

        我要补充一点,也许不是将dr 表示为字符串,而是将其键入为Boolean 更好,然后您可以简单地将其评估为条件的结果:

        val a = 10
        val dr = a == 10
        println("dr: " + dr)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-01
          • 1970-01-01
          • 2011-05-25
          • 2012-07-08
          • 2017-10-25
          • 2018-06-04
          • 2015-05-06
          • 1970-01-01
          相关资源
          最近更新 更多