【发布时间】:2012-03-29 23:34:54
【问题描述】:
List.empty、List() 和 new List() 有什么区别?我什么时候应该使用哪个?
【问题讨论】:
-
您可以将
Nil添加到该列表中。
标签: list scala collections immutability
List.empty、List() 和 new List() 有什么区别?我什么时候应该使用哪个?
【问题讨论】:
Nil 添加到该列表中。
标签: list scala collections immutability
对于空列表的创建,正如其他人所说,您可以使用最适合您的列表。
但是,对于空列表的模式匹配,您只能使用 Nil
scala> List()
res1: List[Nothing] = List()
scala> res1 match {
| case Nil => "empty"
| case head::_ => "head is " + head
| }
res2: java.lang.String = empty
编辑:更正:case List() 也可以,但 case List.empty 无法编译
【讨论】:
从List的源代码我们有:
object List extends SeqFactory[List] {
...
override def empty[A]: List[A] = Nil
override def apply[A](xs: A*): List[A] = xs.toList
...
}
case object Nil extends List[Nothing] {...}
所以我们可以看到完全一样
为了完整起见,您也可以使用Nil。
【讨论】:
首先,new List() 不起作用,因为 List 类是抽象的。其他两个选项在the List object中定义如下:
override def empty[A]: List[A] = Nil
override def apply[A](xs: A*): List[A] = xs.toList
也就是说,它们本质上是等价的,所以主要是风格问题。我更喜欢使用empty,因为我发现它更清晰,并且减少了括号。
【讨论】: