Scala Lift:Box open或者似乎不起作用

时间:2011-08-01 05:18:26

标签: scala compiler-errors lift

我正在阅读“Exploring Lift”一书,我尝试了他们的一个示例代码片段 - 这里唯一的区别是我不使用MegaProtoUser类,而是使用我自己的类。但是,我遇到了以下问题。

这是我的代码段:

User.currentUser.map(user =>
  user.projects.flatMap(project => {
    bind("e", chooseTemplate("project", "entry", in),
      "name" -> Text(project.name.is),
      "actions" -> {
        SHtml.link("/manageProjects", () => project.delete_!, Text("Delete")) ++ Text(" ") ++
          SHtml.link("/editProject", () => currentAccountVar(project), Text("Edit"))
      })
  })) openOr Text("You are not logged in.")

以下是编译器错误:

inferred type arguments [Seq[scala.xml.Node]{def seq: Seq[scala.xml.Node]{def companion: scala.collection.generic.GenericCompanion[Seq[Any]]}; def companion: scala.collection.generic.GenericCompanion[Seq[Any]]}] do not conform to method openOr's type parameter bounds [B >: scala.collection.mutable.Buffer[scala.xml.Node]]  

type mismatch;  found   : scala.xml.Text  required: Seq[scala.xml.Node]{def seq: Seq[scala.xml.Node]{def companion: scala.collection.generic.GenericCompanion[Seq[Any]]}; def companion: scala.collection.generic.GenericCompanion[Seq[Any]]}

如果我用open_替换openOr Text(“你还没有登录。”)那就行了。

为什么我不能在这种情况下使用openOr,这个错误是什么意思?什么是正确的方法呢?

1 个答案:

答案 0 :(得分:2)

错误意味着编译器需要一个序列但找到一个元素。尝试

 List(Text(....))

而不仅仅是

Text(....)