只有一次在while循环中使用scala

时间:2015-08-22 16:54:19

标签: scala while-loop

我从Scala开始。我有一个程序,它有一个带有while循环的方法,直到程序没有结束。

但是对于我的测试,我只需要执行一次(或两次)此方法。在java中,我会使用一个可变变量,我会减少这个变量以便停止我的治疗。

我的while循环中的条件可能会覆盖我的测试。

def receive = {
    val iterator = stream.iterator()
    while (iterator.hasNext && my_condition()) {
        something_to_do
    }
}

我知道这是一个愚蠢的问题,但你可以建议我吗?

3 个答案:

答案 0 :(得分:3)

尝试:

iterator.takeWhile(my_condition).foreach(something_to_do)

或:

iterator.take(n).foreach(something_to_do)

如果您只想要前n个条目。

或者,如果something_to_do返回结果(而不是Unit),并且您想要返回这些结果的迭代器,则可以使用:

iterator.takeWhile(my_condition).map(something_to_do)

(或.take(n).map(...)

答案 1 :(得分:2)

考虑这一点是为了理解,

_

其中忽略每个迭代值(注意txtbox.Text)并在条件成立时调用todo部分。

答案 2 :(得分:0)

我认为以下方法是可以接受的:

import akka.actor.{Props, Actor}

import scala.io.Source

object TestableActor {

  def props = Props(new TestableActor())

  def testProps = Props(new TestableActor(true))

  case class Message(stream: Stream)
}

class TestableActor(doOnce: Boolean = false) extends Actor {

  import TestableActor._

  val stream: Stream = ???

  def receive = {
    case Message(stream) =>
      val iterator = stream.iterator
      if(doOnce) {
        something_to_do
      } else {
        while (iterator.hasNext && my_condition()) {
          something_to_do
        }
      }
  }

  def my_condition(): Boolean = ???

  def something_to_do: Unit = ???
}

在您的生产代码中,使用

context.actorOf(TestableActor.props)

在您的测试中使用

TestActorRef[TestableActor](TestableActor.testProps)