gpt4 book ai didi

scala - 有没有更惯用的方法来使用 Casbah 检查密码?

转载 作者:可可西里 更新时间:2023-11-01 10:34:13 25 4
gpt4 key购买 nike

我有以下代码:

def authenticateByUsername(username: String, password:String): Boolean = {    val user = users.findOne(MongoDBObject(USERNAME -> username))    if(user.isDefined){        val pw = user.get.getAs(PASSWORD)        if(pw.isDefined)             BCrypt.checkpw(pw.get, password)        else false    }else false}

有没有更惯用的方法来做到这一点?这是一个 if-else 噩梦,在 Scala 中似乎不正确。

最佳答案

你是对的,有更好的方法,通常使用 get (或者,在较小程度上, isDefined )在 Option 上是一个危险信号。在这种情况下,您可以使用 for -理解:

def authenticateByUsername(username: String, password: String): Boolean = {
val result: Option[Boolean] = for {
user <- users.findOne(MongoDBObject(USERNAME -> username))
pass <- user.getAs(PASSWORD)
} yield BCrypt.checkpw(pass, password)

result getOrElse false
}

或者,更简洁一点:

def authenticateByUsername(username: String, password: String): Boolean =
users.findOne(MongoDBObject(USERNAME -> username)).flatMap(
_.getAs(PASSWORD)
).map(
BCrypt.checkpw(_, password)
).getOrElse(false)

后者本质上只是 for 的脱糖版本-理解。

关于scala - 有没有更惯用的方法来使用 Casbah 检查密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12327269/

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