从Scala代码中换出“var”并使用“val”而不是“var”

时间:2016-12-06 06:57:42

标签: scala immutability var

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

以下只是一段代码:

var fa = new JsArray

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

fa = fa.:+(ra)

如何使用val for fa?

第二案例:

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

在这里,如果我在 if / else 中添加“dr” “dr”,则无法在 println()中访问即可。 是否有任何帮助可以避免 var

5 个答案:

答案 0 :(得分:4)

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

val dr = if (condition) value1 else value2

答案 1 :(得分:2)

模式匹配是让dr成为val的不错选择,特别是如果您需要针对多个不同的值测试a

val a = 10

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

print(dr)

case 10 => true这实质上说“如果 匹配 10 ,然后将 true 分配给 dr “” case _ = false这表示“如果以上情况均不匹配 a ,则将false指定给 dr

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

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

print(dr)

答案 2 :(得分:1)

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

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

然后fa可以是val。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

我只是添加,或许代替将dr表示为字符串,最好将其键入为Boolean,然后您可以简单地将其评估为结果条件:

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