2012-11-07 8 views
7

Ich versuche, wenn einige Web-Seite mit dem folgenden Funktion ist bis zu überprüfen:Scala Liftweb - Mustertyp ist nicht kompatibel mit den erwarteten Typ

import net.liftweb.common.{Failure, Empty, Full, Box}    // 1 
                    // 2 
def isAlive = {              // 3 
    httpClient.getAsString("http://www.google.com", Nil) match { // 4 
     case f : Full[String] => true        // 5 
     case f : Failure => false         // 6 
     case Empty => false           // 7 
    }                // 8 
}                 // 9 

Die Funktion getAsString Rückgabetyp ist net.liftweb.common.Box[String]

Die Funktion ganz gut funktioniert, aber mein Problem ist, dass, wenn ich ersetzen Linie 6 mit dieser Zeile:

 case Failure => false          // 6 

ich den Fehler bekommen:

error: pattern type is incompatible with expected type; 
found : object net.liftweb.common.Failure 
required: net.liftweb.common.Box[String] 
case Failure => false 

(gleiche gilt für die Linie 5)

Warum geschehen ist das? Warum muss ich eine Variable für die Übereinstimmung verwenden und kann die Übereinstimmung nicht nur nach dem Typ durchführen?

Antwort

5

Sie können nicht wie die basierend auf Typ übereinstimmen, wenn Sie Failure als Muster verwenden Sie auf einem construuctor übereinstimmen müssen:

case Failure(_, _, _) => false 
Verwandte Themen