gpt4 book ai didi

用于解构的 Kotlin 四元组、五元组等

转载 作者:IT老高 更新时间:2023-10-28 13:35:37 43 4
gpt4 key购买 nike

我正在寻找一种简洁的方式来在线创建可破坏的对象。 kotlin.Pairkotlin.Triple 涵盖了很多用例,但有时需要传递的对象更多。

一个示例用例是 RX 的 zip 函数,其中需要将多个 I/O 调用的结果映射到另一个对象:

Single
.zip(repositoryA.loadData(someId),
repositoryB.loadData(someId),
repositoryC.loadAll(),
repositoryD.loadAll()),
{ objectA, objectB, objectsC, objectsD -> /*some Kotlin magic*/ }
)
.map { (objectA, objectB, objectsC, objectsD) -> /*do the mapping*/ }

我试图弄清楚“一些 Kotlin 魔法”部分会发生什么。如果只有 3 个存储库,那就是

Triple(objectA, objectB, objectsC)

我是否需要为此以及任何 n 元组的情况创建一个新的数据类,还是有其他方法?

最佳答案

基础知识

让我们看看解构是如何工作的:

Kotlin 为此定义了一个约定,即 componentX() operator函数是 Kotlin 在许多地方使用的约定原则的一个例子。这些componentX()编译器使用函数来初始化解构声明中的变量。

例如在 Pair<A,B> 中这些函数如下所示:

operator fun component1(): A = first 

operator fun component2(): B = second

如您所见,这些是 operators , 特殊处理的功能。这些componentX() data 的函数可由开发人员提供,并由编译器自动生成类。 Pair也是这样的data顺便说一句。

回答

因此,请继续使用 data当您需要超过 Triple 时的类(class).

例如,一个类 MultiComponent定义为:

data class MultiComponent(val x: Int, val y: Int, val z: Int, val a: Int, val b: Int, val c: Int)

将被编译为具有函数component1() 的类, component2() , ..., component6()并可用于解构声明:

val (q, w, e, r, t, z) = MultiComponent(1, 2, 3, 4, 5, 6)

关于用于解构的 Kotlin 四元组、五元组等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46202147/

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