两者都存在于此处:
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
作为一种类方法(例如类型推断,更高级的类型......)。
PS:
有人建议,如果没有实例方法empty
:
Map[Int, Int](1->2, 21->42).withDefault(_*2).empty
您怎么看?
答案 0 :(得分:2)
这是真的,empty
可以是类实例上的方法。集合和映射所需的原因是它们使用此方法实现其构建器。我想其他地方没有包含的原因是因为它不是典型的用例。
答案 1 :(得分:1)
我想知道为什么Map
有empty
,而不是相反。毕竟,这不是你对某事做的操作,它只是某事的一个例子。
反正:
(List(1, 2, 3): Traversable[Int]).companion.empty
我将Traversable
放在那里只是为了展示这适用于任何集合。
答案 2 :(得分:0)
只有不可变的List。只有一个EmptyList实例,因此类级别为空是没有意义的。
Map trait可以通过mutable实现,因此您需要多个实例。
......我认为这个解释有些缺失,但也许这是一个开始。