Scala警告类型被推断为';AnyVal';
我有一个演员,他的接收代码如下:Scala警告类型被推断为';AnyVal';,scala,warnings,type-inference,Scala,Warnings,Type Inference,我有一个演员,他的接收代码如下: override def receive: Receive = { case RefreshAccessTokenRequest(accountId, Some(refreshToken), _, _) => concurApi.refreshAccessToken(accountId, refreshToken) onComplete { case Success(refreshTokenResult) => contex
override def receive: Receive = {
case RefreshAccessTokenRequest(accountId, Some(refreshToken), _, _) =>
concurApi.refreshAccessToken(accountId, refreshToken) onComplete {
case Success(refreshTokenResult) =>
context.parent ! ConcurResultCallbackInformation(accountId, Right(refreshTokenResult))
accountService.updateAccountOAuth2Credentials(accountId, refreshTokenResult.toOAuth2Credentials) recover {
case ex => logger.error("Error updating account Id: " + accountId + " with new refresh token. message: " + ex.getMessage)
}
context.stop(self)
case Failure(t) =>
context.parent ! ConcurResultCallbackInformation(accountId, Left(t))
context.stop(self)
}
case Cancel => context.stop(self)
case x => logger.error(s"ConcurAccessTokenActor: Got an unknown message $x")
}
我在粗体部分收到一条警告,上面写着:
警告:(18,42)类型被推断为AnyVal
;这可能表示编程错误。
案例成功(结果)=>
这是refreshAccessToken函数:
def refreshAccessToken(accountId: String, refreshToken: String)(implicit context: ExecutionContext) : Future[ConcurRefreshTokenResult] = {
val body = s"client_id=${sandboxClientId}"
val futureRes = ws.url(sandboxRefreshTokenFullUrl).withHeaders("Content-Type" -> "application/x-www-form-urlencoded").post(body)
futureRes.flatMap { res =>
res.status match {
case 200 =>
val extract = Try {
res.body.fromJson[ConcurRefreshTokenResult]
}.recover { case ex =>
throw ex
}
Promise.fromTry(extract).future
case 400 =>
Future.failed(new RuntimeException(s"refresh Access Token failed with status 400, and body: ${res.body}"))
case x =>
Future.failed(new RuntimeException(s"refresh Access Token failed with status $x, and body: ${res.body}"))
}
}
}
有什么想法吗?好的,我知道了
警告来自此代码部分:
case Success(refreshTokenResult) =>
context.parent ! ConcurResultCallbackInformation(accountId, Right(refreshTokenResult))
accountService.updateAccountOAuth2Credentials(accountId, refreshTokenResult.toOAuth2Credentials) recover {
case ex => logger.error("Error updating account Id: " + accountId + " with new refresh token. message: " + ex.getMessage)
}
context.stop(self)
“updateAccountOAuth2Credentials”函数返回Future[Boolean],而恢复部分返回Unit,因此它将其传递给AnyVal
我认为唯一混淆的是警告箭头的位置,因为这个函数出现在2个其他函数的中间,并且对整个case块
的返回类型没有影响,这是你的第18行吗?<代码>的返回类型是什么?信息< /代码>和<代码>。停止< /代码>第18行:案例成功(refreshTokenResult)=>。请注意,'=>'arrow.info(您指的是.error)和.stop上的箭头点都是单位类型。我想我找到了原因,“'UpdateCountOAuth2Credentials'函数返回Future[Boolean],因此整个块的返回类型为AnyVal。