I'm attempting to match a lists first two elements, however, it wont accept lists of arbitrary length. The below code fails.
def demoCases() = {
def actor1 = new Actor[Employee] {}
def actor2 = new Actor[Employee] {}
def actor3 = new Actor[Animal] {}
var actors = List(actor1, actor2, actor3);
println();
actors match {
case (_: Employee) :: (_: Employee) :: tail
=> {println("nice 2 employees to start with ")};
case Nil
=> {println("no match")}
}
The exception :
Exception in thread "main" scala.MatchError: List(.....)
How can i specify that only the two elements first of the list need to match this expression?
The following does not work thanks to type-erasure (pointed out by Alexey Romanov)
Therefore I cannot think of any way to do what you want without restructuring the code. For example if you made
Employee
a member ofActor
somehow, and madeActor
a case class, you could doJust replace
case Nil
bycase _ => println("no match")
._
as a pattern means "match anything". But note that your first case requires that the first two elements of the list areEmployee
s, notActor
s.