Да, вы можете:
object EndsWith {
def unapply[A]( xs: Array[A] ) =
if( xs.nonEmpty ) Some( xs.last ) else None
}
На вашем примере:
val a = Array(Array(1,2,3,4,5),Array(4,5),Array(5),Array(1,2,6,7,8))
a foreach {
case e @ EndsWith(5) => println( e.mkString("(",",",")" ) )
case _ =>
}
Печатается как положено (1,2,3,4,5)
, (4,5)
и (5)
При таком же подходе вы можете написать экстрактор StartWith
, а затем добавить метод для объединения их в новый экстрактор, соответствующий обоим условиям.