【问题标题】:List.empty vs. List() vs. new List()List.empty vs. List() vs. new List()
【发布时间】:2012-03-29 23:34:54
【问题描述】:

List.emptyList()new List() 有什么区别?我什么时候应该使用哪个?

【问题讨论】:

标签: list scala collections immutability


【解决方案1】:

对于空列表的创建,正如其他人所说,您可以使用最适合您的列表。

但是,对于空列表的模式匹配,您只能使用 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 无法编译

【讨论】:

    【解决方案2】:

    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

    【讨论】:

      【解决方案3】:

      首先,new List() 不起作用,因为 List 类是抽象的。其他两个选项在the List object中定义如下:

      override def empty[A]: List[A] = Nil
      override def apply[A](xs: A*): List[A] = xs.toList
      

      也就是说,它们本质上是等价的,所以主要是风格问题。我更喜欢使用empty,因为我发现它更清晰,并且减少了括号。

      【讨论】:

        猜你喜欢
        • 2012-12-05
        • 1970-01-01
        • 1970-01-01
        • 2014-10-17
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 2012-08-07
        相关资源
        最近更新 更多