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

pvi*_*ela 3 kotlin

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

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

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

s1m*_*nw1 13

为什么Kotlin馆藏设计师选择不遵循收集工厂的统一惯例

有一个"统一惯例":使用科特林标准库函数listOf,arrayOf,mapOf等,在规定的文档:

Kotlin没有专门的语法结构来创建列表或集合.从标准库使用的方法,比如listOf(),mutableListOf(),setOf(),mutableSetOf()

我不确定为什么Scala方法会更好.如果你想拥有那些类似于构造函数的函数,那么创建它们并不是什么大事:

fun <T> List<T>(vararg e: T) = listOf(e)

//use it
val l = List(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)