根据 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)
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。
我有一个 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)
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。