gpt4 book ai didi

mysql - 如何将 Anorm RowParser[A] 转换为 RowParser[Option[A]]

转载 作者:行者123 更新时间:2023-11-29 18:26:19 25 4
gpt4 key购买 nike

我在一个项目中使用 Scala Anorm,并且喜欢为案例类编写解析器。然后,我将这些解析器重用于其他查询 - 通常在添加 JOIN 时。

现在有时,我期望一个可选值(即 LEFT JOIN 而不是 JOIN)。能够重用相同的解析器会非常方便,您知道如何实现这一点吗?

举个例子,假设我有以下案例类:

case class Specialty(
id: Long,
name: String
)

使用以下解析器:

def parser(table: String): RowParser[Specialty] = {
get[Long]("id") ~ get[String](table + ".name") map {
case id ~ name => Specialty(id, name)
}
}

如何将 parser:RowParser[Specialty] 转换为 parser:RowParser[OptionSpecialty]]

这将使我能够在通过 LEFT JOIN 添加表专业的查询中使用它。

作为额外的信息,现在我像这样重写解析器:

def parserOptional(table: String):RowParser[Option[Specialty]] = {
get[Option[Long]]("id") ~ get[Option[String]](table + ".name") map {
case oid ~ oname => oid.flatMap{id =>
oname.map{name =>
Specialty(id, name)
}
}
}
}

最佳答案

基于this ,我想我找到了答案

使用(解析器?)

def parserOptional(table: String):RowParser[Option[Specialty]] = parser(table) ?

关于mysql - 如何将 Anorm RowParser[A] 转换为 RowParser[Option[A]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46157936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com