Some collections are empty, and
tail deals with them by throwing an exception:
Seq.empty[Int].tail // java.lang.UnsupportedOperationException: tail of empty list // at scala.collection.immutable.Nil$.tail(List.scala:432) // at scala.collection.immutable.Nil$.tail(List.scala:427) // at repl.Session$App$$anonfun$1.apply(traversable_tail.md:9) // at repl.Session$App$$anonfun$1.apply(traversable_tail.md:9)
drop(1), on the other hand, will yield a reasonable value: the empty list.
Seq(1, 2, 3).drop(1) // res0: Seq[Int] = List(2, 3) Seq.empty[Int].drop(1) // res1: Seq[Int] = List()
Note that this is not always what you want to do. There are scenarios in which you must deal with the empty case explicitly - as a stop condition in a recursive function, say. It’s just that, often, getting the empty list when you ask for everything but the first element of an empty list is perfectly reasonable.