7

我正在尝试使用以下功能检查某些网页是否已启动:

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

函数 getAsString 返回类型是net.liftweb.common.Box[String]

该函数工作得很好,但我的问题是当我用这一行替换第 6 行时:

       case Failure => false                                        // 6

我收到错误:

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

(第 5 行也是如此)

为什么会这样?为什么我必须使用变量进行匹配,而不能仅根据类型进行匹配?

4

1 回答 1

6

您不能根据类型进行匹配,如果您使用失败作为模式,则必须在构造函数上匹配:

case Failure(_, _, _) => false
于 2012-11-07T13:19:03.837 回答