Kotlin –元组类型

Kotlin的表现力写一个Tuple类型非常简单。 我在测试中表达的目标如下:

1.在由2个元素表示的测试中,最多可以定义5个元素的元组,并可以使用索引(如占位符)来检索元素:

val tup = Tuple("elem1", "elem2")
assertThat(tup._1).isEqualTo("elem1")
assertThat(tup._2).isEqualTo("elem2")

2.可以按照以下方式解构组成类型:

val tup = Tuple("elem1", "elem2")
val (e1, e2) = tup

assertThat(e1).isEqualTo("elem1")
assertThat(e2).isEqualTo("elem2")

实作

以下是两个元素的元组的实现:

data class Tuple2<out A, out B>(val _1: A, val _2: B)

Kotlin数据类提供了所有潜在的支持,这些能力能够检索单个字段并使用如下表达式进行解构:

val (e1, e2) = Tuple2("elem1", "elem2")

在这一点上,我需要做的就是提供一个帮助程序,该帮助程序根据所提供的参数数量创建适当大小的元组,我定义如下:

object Tuple {
    operator fun <A> invoke(_1: A): Tuple1<A> = Tuple1(_1)
    operator fun <A, B> invoke(_1: A, _2: B): Tuple2<A, B> = Tuple2(_1, _2)
    operator fun <A, B, C> invoke(_1: A, _2: B, _3: C): Tuple3<A, B, C> = Tuple3(_1, _2, _3)
    operator fun <A, B, C, D> invoke(_1: A, _2: B, _3: C, _4: D): Tuple4<A, B, C, D> = Tuple4(_1, _2, _3, _4)
    operator fun <A, B, C, D, E> invoke(_1: A, _2: B, _3: C, _4: D, _5: E): Tuple5<A, B, C, D, E> = Tuple5(_1, _2, _3, _4, _5)
}

这使我可以使用如下结构定义不同大小的元组:

val tup2 = Tuple("elem1", "elem2")
val tup3 = Tuple("elem1", "elem2", "elem3")
val tup4 = Tuple("elem1", "elem2", "elem3", "elem4")

还有一点扭曲,通常Pair类型是具有2个元素的Tuple的别名,而Triple是3个元素的Tuple的别名,这可以在Kotlin中通过以下方式轻松定义:

typealias Pair<A, B> = Tuple2<A, B>
typealias Triple<A, B, C> = Tuple3<A, B, C>

确实简单! 在我的github仓库中可以找到更多填充的示例– https://github.com/bijukunjummen/kfun

翻译自: https://www.javacodegeeks.com/2018/01/kotlin-tuple-type.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值