在 Scala 中循环后如何使对象持久化?
How to make an object persist after a loop in Scala?
假设我有一个 for 循环,它在每次迭代中创建一个对象并执行某些操作,例如:
def someMethod() {
for( x <- e) {
if( x == 1) val z = 4
else val z = 5
}
z
}
但这不起作用,因为 "z" 没有超出 for 循环。如果我想让它起作用,我必须这样做:
def someMethod() {
var z = 0
for( x <- e) {
if( x == 1) z = 4
else z = 5
}
z
}
但我觉得这不是正确的解决方法。如何使对象(本例中的 z)在 for 循环之外持久化?
您可以从 for comprehension 中产生一个值
def someMethod() {
val z = for( x <- e) {
if(x == 1) yield 4
else yield 5
}
z
}
val z
不是必需的,您可以 return for comprehension 的结果。
def someMethod() {
for( x <- e) {
if(x == 1) yield 4
else yield 5
}
}
您可以停止考虑 scala 中的 for 循环(因为它本身不是循环,而是 for-comprehension)并以函数式方式使用 scala 集合。因此,对于您的任务,您可以编写如下代码:
val x = List(1,2,3,4)
x.find(_ == 1).map(_ => 4).getOrElse(5)
为了理解尝试
for (x <- e; z = if (x == 1) 4 else 5) yield z
其中带有标签 z
的(不可变)值从 if-else 表达式获取结果。这对于理解会产生一个具有 z
.
值的集合
也从收集转换值的角度来解决问题,
e.collect {
case x if (x == 1) => 4
case _ => 5
}
即使对于两种情况的模式匹配,if-else 表达式也可能更加综合。
假设我有一个 for 循环,它在每次迭代中创建一个对象并执行某些操作,例如:
def someMethod() {
for( x <- e) {
if( x == 1) val z = 4
else val z = 5
}
z
}
但这不起作用,因为 "z" 没有超出 for 循环。如果我想让它起作用,我必须这样做:
def someMethod() {
var z = 0
for( x <- e) {
if( x == 1) z = 4
else z = 5
}
z
}
但我觉得这不是正确的解决方法。如何使对象(本例中的 z)在 for 循环之外持久化?
您可以从 for comprehension 中产生一个值
def someMethod() {
val z = for( x <- e) {
if(x == 1) yield 4
else yield 5
}
z
}
val z
不是必需的,您可以 return for comprehension 的结果。
def someMethod() {
for( x <- e) {
if(x == 1) yield 4
else yield 5
}
}
您可以停止考虑 scala 中的 for 循环(因为它本身不是循环,而是 for-comprehension)并以函数式方式使用 scala 集合。因此,对于您的任务,您可以编写如下代码:
val x = List(1,2,3,4)
x.find(_ == 1).map(_ => 4).getOrElse(5)
为了理解尝试
for (x <- e; z = if (x == 1) 4 else 5) yield z
其中带有标签 z
的(不可变)值从 if-else 表达式获取结果。这对于理解会产生一个具有 z
.
也从收集转换值的角度来解决问题,
e.collect {
case x if (x == 1) => 4
case _ => 5
}
即使对于两种情况的模式匹配,if-else 表达式也可能更加综合。