2011-08-01 59 views
1

我正在關注「Exploring Lift」一書,並且我嘗試了一個示例代碼片段 - 這裏唯一的區別是我不使用MegaProtoUser類,而是滾動我自己的。但是,我得到以下問題。Scala Lift:Box openOr似乎無法正常工作

這是我摘錄:

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文本( 「您還沒有登錄」。)!那麼它的工作。

爲什麼我不能在這種情況下使用openOr,這個錯誤是什麼意思?什麼是正確的方法呢?

回答

2

錯誤表示編譯器想要一個序列,但找到了一個元素。嘗試

List(Text(....)) 

,而不是僅僅

Text(....) 
+0

我已經試過了,但已經然後我得到以下錯誤: 類型不匹配;找到:scala.xml.NodeSeq 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]]} 看起來像編譯器不知道它想要什麼... –

+0

我想我記得像這樣的錯誤...你可以發佈你的代碼一種讓我編譯它的形式?除了那一個錯誤當然... –

+0

金,感謝您的時間!在這裏你去:https://gist.github.com/1118420我試圖儘可能縮短它。 –

相關問題