【问题标题】:Scala Lift: Box openOr does not seem to workScala Lift:Box openOr 似乎不起作用
【发布时间】:2011-08-01 13:32:09
【问题描述】:

我正在关注“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]]}

如果我将 openOr Text("You are not logged in.") 替换为 open_!然后就可以了。

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

【问题讨论】:

    标签: scala compiler-errors lift


    【解决方案1】:

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

     List(Text(....))
    

    而不仅仅是

    Text(....)
    

    【讨论】:

    • 我已经尝试过了,但后来出现以下错误:类型不匹配;找到:scala.xml.NodeSeq 需要:Seq[scala.xml.Node]{def seq:Seq[scala.xml.Node]{def 伴侣:scala.collection.generic.GenericCompanion[Seq[Any]]}; def partner: scala.collection.generic.GenericCompanion[Seq[Any]]} 看起来编译器不知道它想要什么......
    • 我想我记得这样的错误...你能把你的代码贴在一个让我编译的形式吗?当然除了那个错误...
    • 金,感谢您的宝贵时间!给你:gist.github.com/1118420我尽量缩短它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2016-02-01
    • 2020-09-23
    • 2010-12-05
    • 2011-06-14
    • 2015-01-10
    相关资源
    最近更新 更多