2012-03-13 4 views
24

List.empty,List()new List()の違いは何ですか?どちらを使うべきですか?List.emptyとList()と新しいList()

+9

case List.emptyコンパイルされませんあなたがに 'Nil'を追加することができますcase List()

はしかし、空のリストに対してパターンマッチングのために、あなただけの無記号

scala> List() res1: List[Nothing] = List() scala> res1 match { | case Nil => "empty" | case head::_ => "head is " + head | } res2: java.lang.String = empty 

EDITを使用することができますそのリスト。 – Jesper

答えて

30

Listクラスが抽象であるため、まずnew List()は機能しません。

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

、すなわち、彼らは本質的に等価だ、それは主にスタイルの問題だ:the List objectに次のように他の2つのオプションが定義されています。私はemptyを使用する方が好きです。なぜなら、私はそれがより明確であることを知っており、それはカッコを減らしているからです。

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を使用できることがわかります。

4

空リストの作成については、他の人が言っているように、あなたに最適なものを使うことができます。訂正:あまりにも動作しますが、

関連する問題