根据 Scala 中的 if 条件分配一个值

Assign a value based on if condition in Scala

我有一个 while 循环,需要根据循环内发生的条件创建一个对象。代码运行正常,但循环结束后对象不可用。

我怀疑我遗漏了一些有关 Scala 中变量范围如何工作的信息。

如果我的尝试行不通,我想了解原因以及替代方案。

这是一个简单的例子

var i = 0

while (i < 5) {
    val magicValue = if (i==2) i
    i += 1
}

println(magicValue) // error: not found: value magicValue

这就是我在 python

中的做法
i = 0

while i<5:
    if (i==2):
        magic_value = i
    i += 1

print(magic_value) # prints 2

请阅读本文 read

您应该使用 var 而不是 val。如果使用 val,则此值只能在 if 范围内使用。

var i = 0
var magicValue = 0
while (i < 5){
  if(i==2) magicValue = i
   i += 1
}
println(magicValue)

demo

Each variable declaration is preceded by its type.
By contrast, Scala has two types of variables:
val creates an immutable variable (like final in Java)
var creates a mutable variable

就像您不会将鸟食喂给狗一样,您也不应尝试使用 Scala 编写 Python 代码。学习一门新语言不仅仅是学习新语法。这也是思考解决问题的新习语和新方法。

val magicValue = (0 to 5).foldLeft(0){
                       case (mv,i) => if (i==2) i else mv}

你可以这样做:

println(0.to(5).find(_ == 2).getOrElse(0))

find will return an Option,以防有元素满足条件。如果有这样的,它将被打印出来。否则,将打印默认的0

例如:

println(0.to(5).find(_ == 20).getOrElse(0))

将打印 0.

还有一个findLast方法,如果你想要最后一个满足这个条件的方法:

println(0.to(5).findLast(_ == 2).getOrElse(0))

代码 运行 在 Scastie