arrow-kt 0.12及以上版本不使用tupled如何对两个Either值执行map操作
Arrow-kt 0.12+ 替代tupled的实现方案
核心逻辑是使用Arrow官方提供的Either.zip扩展函数配合Kotlin原生的Pair/Triple实现相同的短路组合效果,所有输入均为Right时才会执行后续逻辑,否则直接返回第一个遇到的Left。
双参数场景(对应你的示例)
import arrow.core.Either import arrow.core.right import arrow.core.zip // 写法1:用Pair接收组合结果,等价于旧版tupled的返回值 Either.zip( "Hello".right(), "Word".right(), ::Pair ).map { (a, b) -> // 支持Kotlin原生解构,比旧版的params.a写法更简洁 println(a + b) // 仅当两个值均为Right时才会执行 } // 写法2:如果不需要中间容器,可直接在zip中完成逻辑,省略map Either.zip( "Hello".right(), "Word".right() ) { a, b -> println(a + b) }
三参数场景
使用Kotlin原生Triple替代即可,逻辑和双参数完全一致:
Either.zip( "A".right(), "B".right(), "C".right(), ::Triple ).map { (a, b, c) -> println(a + b + c) }
更多参数场景
Arrow提供了最多支持11个参数的zip重载,你可以直接自定义参数处理逻辑,无需额外定义元组类型:
Either.zip( param1.right(), param2.right(), param3.right(), param4.right(), param5.right() ) { p1, p2, p3, p4, p5 -> // 所有参数均为Right时才会进入该作用域 }
内容的提问来源于stack exchange,提问作者Bukharov Sergey
相关产品推荐
相关产品推荐

