gpt4 book ai didi

scala - 如何将以下 flatMap/map 片段转换为 Scala 中的理解?

转载 作者:行者123 更新时间:2023-12-01 10:17:46 24 4
gpt4 key购买 nike

Scala 中以下代码片段的最佳理解形式(无衬里/回调,更少样板)是什么?

val result = emailTakenFuture.flatMap { emailTaken =>
if (emailTaken) {
Future.successful(SignUpResult.EmailAlreadyTaken)
} else {
usernameTakenFuture.flatMap { usernameTaken =>
if (usernameTaken) {
Future.successful(SignUpResult.UsernameAlreadyTaken)
} else {
nextIdFuture.flatMap { userId =>
storeUserFuture(userId).map(user => SignUpResult.Success(user))
}
}
}
}
}

最佳答案

只有最后一个 else 之后的部分才真正适合理解:

for {
userId <- nextIdFuture
user <- storeUserFuture(userId)
} yield SignUpResult.Success(user)

我只是为其余部分编写一个辅助函数:

def condFlatMap[T](future: Future[Boolean], ifTrue: T)(ifFalse: => Future[T]): Future[T] = 
future.flatMap(x => if (x) Future.successful(ifTrue) else ifFalse)

val result =
condFlatMap(emailTakenFuture, SignUpResult.EmailAlreadyTaken) {
condFlatMap(usernameTakenFuture, SignUpResult.UsernameAlreadyTaken) {
for {
userId <- nextIdFuture
user <- storeUserFuture(userId)
} yield SignUpResult.Success(user)
}
}

(未测试,但应该大致正确)

关于scala - 如何将以下 flatMap/map 片段转换为 Scala 中的理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59531310/

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