我从Scala开始。我有一个程序,它有一个带有while循环的方法,直到程序没有结束。
但是对于我的测试,我只需要执行一次(或两次)此方法。在java中,我会使用一个可变变量,我会减少这个变量以便停止我的治疗。
我的while循环中的条件可能会覆盖我的测试。
def receive = {
val iterator = stream.iterator()
while (iterator.hasNext && my_condition()) {
something_to_do
}
}
我知道这是一个愚蠢的问题,但你可以建议我吗?
答案 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)