Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为什么有些集合类有一个;“空的”;类方法之外的实例方法?_Scala_Collections_Methods_Language Design - Fatal编程技术网

Scala 为什么有些集合类有一个;“空的”;类方法之外的实例方法?

Scala 为什么有些集合类有一个;“空的”;类方法之外的实例方法?,scala,collections,methods,language-design,Scala,Collections,Methods,Language Design,两者都存在,例如: Map.empty[Int, Int] Map(1 -> 41).empty Set().empty Set.empty 但这里只存在类方法: List.empty //OK List(1,2,3).empty //Doesn't exist Array.empty //OK Array("a").empty //Doesn't exist 对于类方法来说,empty不是一个完美的例子吗(因此实例方法empty不应该被弃用吗) 或者应

两者都存在,例如:

Map.empty[Int, Int]
Map(1 -> 41).empty

Set().empty
Set.empty
但这里只存在类方法:

List.empty        //OK
List(1,2,3).empty //Doesn't exist

Array.empty       //OK
Array("a").empty  //Doesn't exist
对于类方法来说,
empty
不是一个完美的例子吗(因此实例方法
empty
不应该被弃用吗)

或者应该将一个
empty
实例方法添加到缺少它的类中吗

从语言的角度来看,是否有任何东西使得仅将
作为类方法变得困难(例如类型推断、高级类型等)

附言: 有人建议,如果没有实例方法
empty
,则很难实现具有默认值的映射:

Map[Int, Int](1->2, 21->42).withDefault(_*2).empty

你觉得怎么样?

只有不可变的列表。EmptyList只有一个实例,因此类级别的empty没有意义

映射特性可以通过可变项实现,因此需要多个实例


。。。我认为这个解释缺少了一些东西,但可能这只是一个开始。

没错,
empty
可能是类实例上的一个方法。集合和映射之所以需要它,是因为它们使用这种方法实现它们的构建器。我想它没有被包括在其他地方的一个原因是因为它不是一个典型的用例。

我想知道为什么
Map
空的
,而不是相反。毕竟,这不是你对某件事做的操作,它只是某件事的一个实例

无论如何:

(List(1, 2, 3): Traversable[Int]).companion.empty

我把
Traversable
放在那里,只是为了显示它对任何集合都有效。

我猜实例上的
empty
方法是前canBuildFrom时代的产物。为什么它没有意义?不要求
List.empty
返回新实例。为什么不能从List.empty返回
Nil