2012-11-07 10 views
7

staram się sprawdzić, jeśli niektóre strona internetowa jest przy użyciu następujących funkcji:Scala Liftweb - typ wzoru jest niezgodne z oczekiwanym rodzaju

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 

Funkcja typ zwracany getAsString jest net.liftweb.common.Box[String]

Funkcja działa dobrze, ale moim problemem jest to, że kiedy wymienić linii 6 z tej linii:

 case Failure => false          // 6 

dostaję błąd:

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

(to samo odnosi się do linii 5)

Dlaczego tak się stało? Dlaczego muszę używać zmiennej do meczu i nie mogę wykonać dopasowania zgodnie z typem?

Odpowiedz

5

Nie można tak dopasować w zależności od rodzaju, jeśli używasz Awaria jako wzorzec musi pasować na construuctor:

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