【发布时间】:2016-02-01 00:50:26
【问题描述】:
我想对 initConnection 进行初始调用,它调用 getData 递归调用自身,直到它需要刷新连接 ID,然后它调用 initConnection。
@tailrec private def initConnection(): Unit =
{
val response: Future[Response] = initHeaders(WS.url(url)).post(auth)
response.onSuccess {
case resp => getData(20, resp.asInstanceOf[Response].header("connectionID").get)
}
response.onFailure {
case resp => initConnection()
}
}
@tailrec private def getData(requestsLeft: Int, sessionId: String): Unit =
{
if (requestsLeft == 0)
{
initConnection()
}
else
{
//send request and process data
getData(requestsLeft - 1, sessionId)
}
}
我在 IntelliJ 中收到“递归调用不在尾部位置”错误,仅针对 initConnection 函数。不能在两个函数之间使用尾递归吗?还是仅与我的 Future[Response] 有关?
我也尝试删除 Future[Response]
@tailrec private def initConnection(): Unit =
{
val response: Response = initHeaders(WS.url(url)).post(auth).value.get.get
getData(20, response.header("ConnectionID").get)
}
并得到一个关于 initConnection 的错误,其中不包含递归调用。然而这显然是无限递归的
【问题讨论】:
标签: scala recursion tail-recursion