Scala:具有未来堆栈溢出错误的递归
Scala: Recursion with future Stack overflow error
考虑以下代码片段。太多的 take() 调用会导致堆栈溢出错误。克服这种情况的好策略是什么?
def take(): Future[Int] = {
val processResponseF: Future[Boolean] = performSomeAction()
processResponseF.flatMap(
processResponse => {
if(processResponse)
Future.successful(100)
else
take()
}
)
}
def performSomeAction(): Future[Boolean] = {
//This returns future of boolean
}
假设 -
1.方法签名不应该改变
Too many take() calls will result in stack overflow error.
不会。当 returns a Future
递归调用自身的方法时,该方法所知道的只是它有一个将来(可能)会被填充的值。实际代码在不同的堆栈上执行,因为它需要与原始调用异步完成,甚至可能不会发生在同一线程上。
考虑以下代码片段。太多的 take() 调用会导致堆栈溢出错误。克服这种情况的好策略是什么?
def take(): Future[Int] = {
val processResponseF: Future[Boolean] = performSomeAction()
processResponseF.flatMap(
processResponse => {
if(processResponse)
Future.successful(100)
else
take()
}
)
}
def performSomeAction(): Future[Boolean] = {
//This returns future of boolean
}
假设 - 1.方法签名不应该改变
Too many take() calls will result in stack overflow error.
不会。当 returns a Future
递归调用自身的方法时,该方法所知道的只是它有一个将来(可能)会被填充的值。实际代码在不同的堆栈上执行,因为它需要与原始调用异步完成,甚至可能不会发生在同一线程上。