subset2을 사용하여 DBObject와 case 클래스 객체를 구문 분석하는 방법을 아는 사람이 있습니까? 슈퍼 간결 문서는어떻게 DBObject를 case2 클래스를 사용하여 case 클래스 객체로 파싱합니까?
이 경우 클래스를
case class MenuItem(id : Int, name: String, desc: Option[String], prices: Option[Array[String]], subitems: Option[Array[MenuItem]])
object MenuItem {
implicit val asBson = BsonWritable[MenuItem](item =>
{
val buf: DBObjectBuffer = DBO("id" -> item.id, "name" -> item.name)
item.desc match { case Some(value) => buf.append("desc" -> value) case None => }
item.prices match { case Some(value) => buf.append("prices" -> value) case None => }
item.subitems match { case Some(value) => buf.append("subitems" -> value) case None => }
buf()
}
)
}
을 다음 고려 :(나에게 도움이되지 않으며 나는 내가 마지막 필드 subitems
를 제거하면 작동
val menuItemParser: DocParser[MenuItem] = int("id") ~ str("name") ~ str("desc").opt ~ get[Array[String]]("prices").opt ~ get[Array[MenuItem]]("subitems").opt map {
case id ~ name ~ desc_opt ~ prices_opt ~ subitems => {
MenuItem(id, name, desc_opt, prices_opt, subitems)
}
}
이 파서를 썼다. 그러나 버전은 위 MenuItem
에 자체 참조 필드가 있기 때문에 컴파일되지 않습니다. 다음 오류가 발생합니다.
Cannot find Field for Array[com.borsch.model.MenuItem]
val menuItemParser: DocParser[MenuItem] = int("id") ~ str("name") ~ str("desc").opt ~ get[Array[String]]("prices").opt ~ get[Array[MenuItem]]("subitems").opt map {
^
마지막으로 get
이 암시 적으로 Field[MenuItem]
을 원하기 때문에 분명히 컴파일되지 않습니다. 하지만 내가 MenuItem
에 대해 정의한다면 꽤 많은 복사 - 붙여 넣기 DocParser[MenuItem]
않을까요?
어떻게 우아하게 할 수 있습니까?
은 당신의 컴파일 오류를 생성하는 코드 또는 기대하는 동작을 얻지 못하고 있습니까? – cmbaxter
컴파일 오류 – expert