gpt4 book ai didi

scala - 将带有 if 和 else 子句的嵌套平面图表达式重写为 for comprehension

转载 作者:行者123 更新时间:2023-12-03 21:43:58 26 4
gpt4 key购买 nike

考虑以下嵌套的平面图结构:

val isValid: F[Boolean] = userRepository.isValid(username, password)

isValid.flatMap(valid =>
if (valid) {
userRepository.getClaims(username).flatMap(claims => {
val token = JWTRefreshService.createToken(claims)
Created(token)
}
)
} else {
Unauthorized(headers.`WWW-Authenticate`(NonEmptyList.of(Challenge(scheme = "Bearer", realm =
"Access to authorize a request"))))
}
)
哪里 FF[_] : Sync .
我怎样才能把这个结构改写成 for-comprehension。我无法弄清楚如何在不创建嵌套 for-comprehension 的情况下重写 if else 子句。

最佳答案

我会用这样的东西:

for {
isValid <- userRepository.isValid(username, password)
validation <- if (isValid) createToken(username)
else
Unauthorized(
headers.`WWW-Authenticate`(
NonEmptyList.of(Challenge(scheme = "Bearer", realm = "Access to authorize a request"))
)
)
} yield validation

def createToken[F: Sync](username: String): F[YourADT] = for {
claims <- userRepository.getClaims(username)
token <- JWTRefreshService.createToken(claims)
} yield Created(token)

关于scala - 将带有 if 和 else 子句的嵌套平面图表达式重写为 for comprehension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65788699/

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