scala - 即使我正在使用变量,也会收到未使用的变量警告

标签 scala compiler-warnings unused-variables

在下面的代码中,我得到一个 token ,我正在查询多个返回 Future 的数据库。我想根据上一个查询的结果进行下一个查询。

val result:Future[Result] = for{tokenOption:Option[UserToken] <- if(urlHost != "" && successUrlParameter != "" && failUrlParameter != "") {userTokenRepo.findOne(UserTokenKey(UUID.fromString(token)))} else {Future.successful(None)}  //generator 1 - get token from database
                                    userOption:Option[User] <- if (tokenOption.isDefined) {userRepo.findOne(tokenOption.get.userKeys)} else {Future.successful(None)} //generator2. found token, look for corresponding user to which the token belongs
                                    modifiedUser:Option[User] <- if (userOption.isDefined) {confirmSignupforUser(userOption.get)} else Future.successful(None) //generator 3. found user and token. Update profile
                                    deletedToken:Option[UserTokenKey] <- if(modifiedUser.isDefined) {userTokenRepo.delete(UserTokenKey(UUID.fromString(token)))} else Future.successful(None)
       }
         yield { //check if we have user and token and modified user here. If any is missing, return error else success
           if(urlHost == "" || successUrlParameter == "" || failUrlParameter == ""){//error in reading redirection url.
             InternalServerError(Json.toJson(JsonResultError("Internal Server Error. Redirection missing ")))
           } else { //read redirection url, so can redirect with success or failure parameter
             println("db query results tokenOption: " + tokenOption + ", userOption: " + userOption + " : modifiedUserOption: " + modifiedUser + ", deletedToken: " + deletedToken)
             //all db ops other than deletinng token should be successful. Error in deletinng token is not a critical error from user perspective and thus should not affect signup verification
             if (tokenOption.isDefined && userOption.isDefined && modifiedUser.isDefined /*&& deletedToken.isDefined*/) {
               Redirect(s"${urlHost};${successUrlParameter}") //TODOM - pick from config
             }
             else {
               /*TODOM - when redirecting with error, can provide additional info why sign up failed*/
               Redirect(s"${urlHost};${failUrlParameter}") //TODOM - pick from config
             }
           }
         }

我在编译器选项中启用了“-Xfatal-warnings”-Ywarn-unused:locals。我收到警告说 tokenOptionuserOptionmodifiedUserdeletedToken 未使用,但我正在使用它们(如果前一个查询返回的 Option isDefined,则完成下一个查询。)。为什么我会收到编译器警告?

Error:(410, 40) pattern var tokenOption in value $anonfun is never used; `tokenOption@_' suppresses this warning
       val result:Future[Result] = for{tokenOption:Option[UserToken] <- if(urlHost != "" && successUrlParameter != "" && failUrlParameter != "") {userTokenRepo.findOne(UserTokenKey(UUID.fromString(token)))} else {Future.successful(None)}  //generator 1 - get token from database

Error:(411, 37) pattern var userOption in value $anonfun is never used; `userOption@_' suppresses this warning
                                    userOption:Option[User] <- if (tokenOption.isDefined) {userRepo.findOne(tokenOption.get.userKeys)} else {Future.successful(None)} //generator2. found token, look for corresponding user to which the token belongs

最佳答案

根据 Unused warning occurred even if the variable was used #11175 这似乎是一个错误。以下代码片段

object Hello {
  for {
    a <- Option(1)
    b <- Option(2) if a == 1
  } yield a + b
}

在我的机器上使用 Scala 2.12.8 和 2.13 重现了该问题,但在 Scala 2.12.1 上似乎没有出现此问题,因此我建议尝试不同的版本,看看哪一个适合您。

关于scala - 即使我正在使用变量,也会收到未使用的变量警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57122414/

相关文章:

scala - 为伴随对象中的方法指定类型差异的正确方法是什么

scala - 方法迭代器和 View 之间有什么区别?

c - 当使用 -Wmissing-prototypes 时,如何抑制 GCC 对中断例程没有原型(prototype)的警告?

ios - 使用变量时NSString中的“Expression myExpression未使用”

scala - 如何从列表中删除 2 个或多个重复项并保持其初始顺序?

scala - 泛型类型的模式匹配

c++ - 展开和堵塞对大循环的影响

java - IntelliJ 命令行编译器

c - 忽略c中代码块中未使用的变量

hashtable - 什么是 "Unused variable G**** in anonymous function"?