gpt4 book ai didi

kotlin - 如何在同步上下文中使用箭头 kt 中的 IO 组合

转载 作者:行者123 更新时间:2023-12-02 13:12:21 25 4
gpt4 key购买 nike

我有以下接口(interface):

interface UserRepository {
fun role(codename: String): IO<Option<Role>>

fun accessRights(roleId: Long): IO<List<AccessRight>>
}

现在尝试使用它来组成这样的有效操作:
private fun retrieveRole(roleCodename: String): IO<Option<RoleTo>> =
IO.fx {
val role = userRepository.role(roleCodename).bind()
role.map { r ->
val ar = userRepository.accessRights(r.id).bind()
RoleTo.of(r, ar)
}
}

代码在第二次绑定(bind)时编译失败(调用 userRepository.accessRights(r.id).bind(),因为 bind 是挂起函数。我怎样才能正确组合两个操作?我不明白为什么第一次绑定(bind)有效,但第二次无效,我也不知道想让我的功能暂停还是我必须这样做?

最佳答案

这是一个常见的问题。如果您有 Option<A>Either<E, A>并且您想对其采取行动,您的第一直觉是在街区使用它:

either.map { !someIO }

问题是未涵盖 left/none 选项。您应该在双方都采取行动,并在执行之前提取 IO。
!either.fold({ ioLogError(it) }, { someIo })

目前,从 0.10 开始,因为 fold是一个内联函数,您可以使用 !里面也是。我不能保证将来会是这样,因为这是我们为了方便而留下的一种意外的内联行为。

关于kotlin - 如何在同步上下文中使用箭头 kt 中的 IO 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58039277/

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