_List.empty
_、List()
とnew List()
の違いは何ですか?どちらを使用すればよいですか?
まず、List
クラスは抽象クラスであるため、new List()
は機能しません。他の2つのオプションは List
オブジェクト で次のように定義されています。
override def empty[A]: List[A] = Nil
override def apply[A](xs: A*): List[A] = xs.toList
つまり、これらは基本的に同等なので、ほとんどがスタイルの問題です。 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
を使用することもできます。
空のリストを作成するには、他の人が言ったように、自分に一番似ているリストを使用できます。
ただし、空のリストに対するパターンマッチングでは、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
_はコンパイルされません