如何在Scala for循环中使用函数
我有这样的代码:如何在Scala for循环中使用函数,scala,Scala,我有这样的代码: case class State(state:Long=0,time:Long=0) def funtionA(int a):Either[error, State] var a = 123 val inloop = new Breaks for (s <- funtionA(a) ) { if (s.state == 1) { println(s.state ) println("ok") inloop.b
case class State(state:Long=0,time:Long=0)
def funtionA(int a):Either[error, State]
var a = 123
val inloop = new Breaks
for (s <- funtionA(a) ) {
if (s.state == 1) {
println(s.state )
println("ok")
inloop.break()
}
else {
println( s.state )
println("not ok")
}
}
case类状态(状态:Long=0,时间:Long=0)
def funtionA(int a):任一[错误,状态]
变量a=123
val inloop=新的中断
对于(s,在函数式语言中执行此循环的方法是使用递归函数:
def loop(a: Int): Unit =
funtionA(a) match {
case Right(s) =>
println(s.state)
if (s.state == 1) {
println("ok")
} else {
println("not ok")
loop(a)
}
case Left(e) =>
println(s"error $e")
}
loop(123)
然而,这似乎是在轮询另一个线程,这不是一个好主意。请考虑使用类似于Future
或Akka Actors的方法来管理多线程。在函数式语言中执行此循环的方法是使用递归函数:
def loop(a: Int): Unit =
funtionA(a) match {
case Right(s) =>
println(s.state)
if (s.state == 1) {
println("ok")
} else {
println("not ok")
loop(a)
}
case Left(e) =>
println(s"error $e")
}
loop(123)
然而,这似乎是轮询另一个线程,这不是一个好主意。请考虑使用类似于Future
或Akka Actors的方法来管理多线程。运行function()
一次,或者直到s.state==1
?您想要哪一个?为什么function(a)
返回与第一次调用时不同的内容?看起来像是一个糟糕的设计。@AndyfunctionA
返回一个或,当正确时,它只执行一次循环体。它不会运行超过一次。不需要循环断路器。理解任何你不想要的东西都会让人困惑o实现。请具体说明您的目标。我希望运行function()
直到s.state==1。因为function
现在请告诉我什么是state
。我的代码有其他线程继续运行。@Andy您可以尝试使用functionA(a).FilterRelse(\uu.state==1,错误)
将右侧替换为非1
状态,左侧替换为状态(错误)
。运行functionA()
一次,或者直到s.state==1
?您想要哪一个?为什么functionA(a)
返回与第一次调用时不同的内容?看起来像是一个糟糕的设计。@AndyfunctionA
返回一个或,当正确时,它只执行一次循环体。它不会运行超过一次。不需要循环断路器。理解任何你不想要的东西都会让人困惑o实现。请具体说明您的目标。我希望运行function()
直到s.state==1。因为function
现在请告诉我什么是state
。我的代码有其他线程继续运行。@Andy您可以尝试使用functionA(a).FilterRelse(\uu.state==1,错误)
将右侧替换为非1的状态
替换为左侧(错误)
。