web-dev-qa-db-ja.com

List.empty vs. List()vs. new List()

_List.empty_、List()new List()の違いは何ですか?どちらを使用すればよいですか?

28
fredoverflow

まず、Listクラスは抽象クラスであるため、new List()は機能しません。他の2つのオプションは Listオブジェクト で次のように定義されています。

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

つまり、これらは基本的に同等なので、ほとんどがスタイルの問題です。 emptyの方がわかりやすいので、かっこを切り詰めて使用することを好みます。

33
Travis Brown

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を使用することもできます。

12

空のリストを作成するには、他の人が言ったように、自分に一番似ているリストを使用できます。

ただし、空のリストに対するパターンマッチングでは、Nilしか使用できません。

_scala> List()
res1: List[Nothing] = List()

scala> res1 match {
     | case Nil => "empty"
     | case head::_ => "head is " + head
     | }
res2: Java.lang.String = empty
_

[〜#〜] edit [〜#〜]:修正:case List()も機能しますが、_case List.empty_はコンパイルされません

4
Paolo Falabella