gpt4 book ai didi

Scala 类型不匹配

转载 作者:可可西里 更新时间:2023-11-01 09:32:07 25 4
gpt4 key购买 nike

我遇到了类型不匹配的问题。

类型不匹配;发现:需要选项[models.User]:models.User

def authenticate = Action { implicit request =>
signinForm.bindFromRequest.fold(
formWithErrors => BadRequest(html.signin(formWithErrors)),
user => Redirect(routes.Application.active).withSession(Security.username -> User.getUserName(user))
)
}

如何强制函数接受 Option[models.User] 或将 models.User 转换为 Option?

错误发生在这里:User.getUserName(user)。 getUserName 需要模型。用户类型。

=============================================

更新所有使用的代码:

来自 User.scala

  def authenticate(email: String, password: String) : Option[User] = {
(findByEmail(email)).filter { (user => BCrypt.checkpw(password, user.password)) }
}

def findByEmail(email: String) : Option[User] = {
UserDAO.findOne(MongoDBObject("email" -> email))
}

来自 Application.scala

  val signinForm = Form {
mapping(
"email" -> nonEmptyText,
"password" -> text)(User.authenticate)(_.map(user => (user.email, "")))
.verifying("Invalid email or password", result => result.isDefined)
}

def authenticate = Action { implicit request =>
signinForm.bindFromRequest.fold(
formWithErrors => BadRequest(html.signin(formWithErrors)),
user => Redirect(routes.Application.active).withSession(Security.username -> User.getUserName(user.get))
)
}

最佳答案

要将 Option[User] 取消选择为 User,您可以执行以下操作之一:

1) 不安全的方式。仅当您确定optUser 不是None 时才执行此操作。

val optUser: Option[User] = ...
val user: User = optUser.get

2)安全的方式

val optUser: Option[User] = ...
optUser match {
case Some(user) => // do something with user
case None => // do something to handle the absent user
}

3) monadic 安​​全方式

val optUser: Option[User] = ...
optUser.map(user => doSomething(user))

最重要的是,如果 optUser 可能实际上是 None,您需要弄清楚在存在的情况下您实际想要发生什么没有 User 对象。

如果您想了解更多信息,可以在其他 StackOverflow 问题中找到更多关于 Option 的信息。

关于Scala 类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12232095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com