2014-01-05 7 views
6

Schauen Sie sich den Code-Snippet bestimmen:Scala: Wie der Ausnahmetyp eines Ausfall

userService.insert(user) match { 
    case Success(f) => Logger.debug("User created successfully") 
    case Failure(e) => { 
    // how do I determine the type of `e`? 
    } 
} 

Wie bestimme ich den Typen der von Failure enthaltenen Ausnahme? Ich muss je nach Ausnahmetyp verschiedene Aktionen ausführen.

Antwort

8
case Success(f) => 
case Failure(e: ExceptionType1) => 
case Failure(e: ExceptionType2) => 
case Failure(e) => // other 

oder

case Success(f) => 
case Failure(e) => e match { 
    case e1: ExceptionType1 => 
    case e2: ExceptioNType2 => 
    case _ => 
} 
+0

Vielen Dank :-) – j3d

+0

@Didier, die Ihnen mehr idiomatische scheint? Letzteres scheint mir klarer zu sein, da sich das innere Spiel nur auf "Ausnahmen" bezieht. –

+3

Nicht sicher, ob einer von ihnen mehr Standard ist. Ich glaube, ich würde die erste verwenden, außer wenn es ein gemeinsames Verhalten im Falle eines Fehlers gibt: Sie können andere Anweisungen als die e-Übereinstimmung in den Fehlerfall einfügen. Beide sehen gut aus, benutze das, was zu dir passt. –