gpt4 book ai didi

scala - 使用 Slick 创建单列表

转载 作者:行者123 更新时间:2023-12-02 04:02:52 26 4
gpt4 key购买 nike

我很习惯编写像这样的标准流畅的样板代码。

假设我正在创建一个名为 Foo 的表,其中包含 id 和 name 列。我们可以这样写

case class Foo(id: Long, name: String)
final class FooTable(tag: Tag) extends Table[Foo](tag, "foo") {
def id = column[Long]("id")
def name = column[String]("name")
def * = (id, name) <> (Foo.tupled, Foo.unapply)
}

但是如果我想要一个单列表,其中 Foo 只有一个名称怎么办?下面的代码无法编译,因为 Now Foo 不再具有 tupled 方法。

case class Foo(name: String)
final class FooTable(tag: Tag) extends Table[Foo](tag, "foo") {
def name = column[String]("name")
def * = (name) <> (Foo.tupled, Foo.unapply)
}

我在 SO 上找到了这个帖子

Scala projections in Slick for only one column

并将我的代码更改为

case class Foo(name: String)
final class FooTable(tag: Tag) extends Table[Foo](tag, "foo") {
def name = column[String]("email_address")
def * = (name)
}

但仍然无法编译

最佳答案

如果是单个参数,请使用Foo.apply _。您的代码如下所示

case class Foo(name: String)

final class FooTable(tag: Tag) extends Table[Foo](tag, "foo") {
def name = column[String]("name")
def * = (name) <> ((Foo.apply _), Foo.unapply)
}

说明:

scala> case class Foo(name: String)
defined class Foo

scala> Foo.apply _
res0: String => Foo = <function1>

如果是单参数案例类 Foo.apply _ 返回一个所需的 function1。

但如果有多个参数,这是不可能的,因此需要执行 .tupled

关于scala - 使用 Slick 创建单列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41064332/

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