gpt4 book ai didi

kotlin - 为什么 Kotlin 不使用 `List(...)` 作为列表工厂和所有抽象集合的类似约定?

转载 作者:行者123 更新时间:2023-12-01 07:23:58 25 4
gpt4 key购买 nike

在 Scala 中,有一个通过伴随对象提供集合工厂方法的便捷约定,使用伴随对象的 apply方法。所以,如果我想创建一个包含元素 1、2 和 3 的列表,我只需使用 List(1, 2, 3) .该模式在所有集合类型中都是一致的。

在 Kotlin 中,如果我写 List(1, 2, 3)我得到一个编译错误。要创建包含 1、2 和 3 的列表,必须使用 listOf(1, 2, 3) . List是一个接口(interface),所以它显然没有构造函数。可能有一个伴生对象,但没有。有一个List函数,尽管签名与人们期望的来自 Scala (public inline fun <T> List(size: Int, init: (index: Int) -> T): List<T>) 的签名不同。

那么,为什么 Kotlin 集合库的设计者选择不遵循类似于 Scala 中集合工厂的统一约定呢?

最佳答案

why did the Kotlin collection library designers choose not to follow a uniform convention for collection factories



有一个“统一约定”:使用 Kotlin 标准库函数 listOf , arrayOf , mapOf等,如 docs 中所述:

Kotlin does not have dedicated syntax constructs for creating lists or sets. Use methods from the standard library, such as listOf(), mutableListOf(), setOf(), mutableSetOf()



我不确定为什么 Scala 方法实际上会更好。如果您无论如何都喜欢拥有那些类似构造函数的函数,那么创建它们并不是什么大问题:
fun <T> List<T>(vararg e: T) = listOf(e)

//use it
val l = List(1, 2, 3, 4)

关于kotlin - 为什么 Kotlin 不使用 `List(...)` 作为列表工厂和所有抽象集合的类似约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48034775/

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