You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:36:00