Kotlin如何将Triple返回值直接作为多参数传入函数
结论
Kotlin 原生没有提供类似 Python 通用可变参数解包的语法,但针对你当前 Triple 对应 3 参数函数的场景,无需修改原有两个函数的定义,就可以实现不用手动拆分Triple成员逐个传参的效果,有两种常用实现方案:
方案1:定义通用解包扩展函数(推荐,可复用)
通过重载3参数函数的invoke运算符,实现所有3参数函数都支持直接传入对应类型的Triple调用,全局定义一次就可以所有地方复用:
operator fun <P1, P2, P3, R> Function3<P1, P2, P3, R>.invoke(triple: Triple<P1, P2, P3>): R { return invoke(triple.first, triple.second, triple.third) }
调用时直接用函数引用传入Triple即可,完全不需要手动提取Triple的成员:
// ::getSlots 是Kotlin的函数引用语法,对应3参数函数类型,匹配扩展函数要求 ::getSlots(myMagicFunction())
方案2:无额外定义的简洁写法
如果不想额外写扩展工具,可以直接配合标准库run方法实现无变量声明的调用,比手动解构再传参更简洁:
myMagicFunction().run { getSlots(first, second, third) }
如果后续需要适配4参数函数对应Quadruple的场景,用同样的思路给Function4写对应的invoke扩展即可。
内容的提问来源于stack exchange,提问作者Marc Sances
相关产品推荐
相关产品推荐

