【发布时间】:2016-11-05 16:05:11
【问题描述】:
我有以下作为树节点的类:
case class Node[A] ( id: Int, data: A, var children: Option[Seq[Node[A]]],
var parent: Option[Node[A]] )
其中id为节点id号,data表示节点中存储的信息,children为子节点列表,parent为父节点。
我想用树生成一个json,所以我写了下面的隐式val:
implicit val nodeWrite : Writes[Node[Data]] = (
(JsPath \ "sk").write[Int] and
(JsPath \ "dat").write[Data] and
(JsPath \ "ch").write[Option[Seq[Node[Data]]]] and
(JsPath \ "par").write[Option[Node[Data]]]
) (unlift(Node[Data].unapply))
但是编译器抱怨:
对象节点中的方法应用缺少参数列表未应用 仅当函数类型为 预期的。您可以通过编写 apply _ 或 apply(,,,) 而不是 apply。
如何解决这个问题?
更新
数据定义为:
case class Data (descrip: String)
更新 2
因为我需要一棵有 N 个根的树,所以我创建了一个包含一系列节点的 Tree 类。
case class Tree[A] ( var nodes: Option[Seq[Node[A]]] )
但是我在序列化树时遇到了问题:
implicit val treeWrite : Writes[Tree[Data]] = new Writes[Tree[Data]] {
def writes(x: Tree[Data]) = {
Json.obj(
"nodes" -> x.nodes.map(_.map(n => writes(n)))
)
}
}
它抛出
类型不匹配;发现:需要选项[Nothing]: play.api.libs.json.Json.JsValueWrapper
在x.nodes.map 行中。
【问题讨论】:
-
什么是
Data,你是如何编译Node[Data].unapply的? -
看看更新。我无法编译 Writes 对象
标签: scala playframework playframework-2.0