List.empty
,List()
和new List()
之间的区别是什么?我什么时候应该使用哪个?
答案 0 :(得分:33)
首先,new List()
不起作用,因为List
类是抽象的。其他两个选项在the List
object中定义如下:
override def empty[A]: List[A] = Nil
override def apply[A](xs: A*): List[A] = xs.toList
即,它们基本上是等价的,所以它主要是风格问题。我更喜欢使用empty
,因为我发现它更清晰,并且它减少了括号。
答案 1 :(得分:12)
从我们的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
。
答案 2 :(得分:4)
对于空列表的创建,正如其他人所说,你可以使用最适合你的那个。
但是对于空列表的模式匹配,您只能使用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
无法编译