如何在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)
返回与第一次调用时不同的内容?看起来像是一个糟糕的设计。@Andy
functionA
返回一个
,当
正确时,它只执行一次循环体
。它不会运行超过一次。不需要循环断路器。理解任何你不想要的东西都会让人困惑o实现。请具体说明您的目标。我希望运行
function()
直到s.state==1。因为
function
现在请告诉我什么是
state
。我的代码有其他线程继续运行。@Andy您可以尝试使用
functionA(a).FilterRelse(\uu.state==1,错误)
将右侧替换为非
1
状态,左侧替换为
状态(错误)
。运行
functionA()
一次,或者直到
s.state==1
?您想要哪一个?为什么
functionA(a)
返回与第一次调用时不同的内容?看起来像是一个糟糕的设计。@Andy
functionA
返回一个
,当
正确时,它只执行一次循环体
。它不会运行超过一次。不需要循环断路器。理解任何你不想要的东西都会让人困惑o实现。请具体说明您的目标。我希望运行
function()
直到s.state==1。因为
function
现在请告诉我什么是
state
。我的代码有其他线程继续运行。@Andy您可以尝试使用
functionA(a).FilterRelse(\uu.state==1,错误)
将右侧替换为非
1的状态
替换为
左侧(错误)