パターンマッチをもう一度行うと、Nilを使って空のリストをチェックすることができます。基本となる型が反復処理可能である場合は、あなたはまだナシを確認することができ、それが空集合、などのために中断します...以下のREPLセッションを参照してください:この種のバグパターンマッチングとNilを防ぐ方法
scala> val l: Iterable[Int] = List()
l: Iterable[Int] = List()
scala> l match {
| case Nil => 1
| case _ => 2
| }
res0: Int = 1
scala> val l: Iterable[Int] = Set()
l: Iterable[Int] = Set()
scala> l match {
| case Nil => 1
| case _ => 2
| }
res2: Int = 2
質問です - どのように私は、この種のを防ぐことができます問題の?明らかに、lが型Listの場合、バグはありません。そして、もしlがSet型であれば、それはコンパイルされません。しかし、リストを持つクラスがあり、このようにパターンを一致させる関数を定義すれば、代わりにジェネリック反復可能クラスを変更する人はいますか?このNil vs. _パターンは一般的に悪い考えですか?
サブタイプは両刃の剣です。慎重に使用してください。 –