Postgresql 在Slick/Scala中将TableQuery对象作为参数传递会导致奇怪的类型错误,但在注入时不会

Postgresql 在Slick/Scala中将TableQuery对象作为参数传递会导致奇怪的类型错误,但在注入时不会,postgresql,scala,functional-programming,slick,Postgresql,Scala,Functional Programming,Slick,我正在编写一个函数,将一些数据持久保存到光滑的postgres数据库中。这是我的表,持久化了ClientRow对象: 类ClientTable(tag:tag)扩展表[ClientRow](tag,“clients”){ def clientId=列[Long](“客户端id”,O.PrimaryKey,O.AutoInc) ... 超控def*= (clientId、电话号码、名字、姓氏、trainerId、日期注册)(ClientRow.tuple、ClientRow.unapply) }

我正在编写一个函数,将一些数据持久保存到光滑的postgres数据库中。这是我的表,持久化了
ClientRow
对象:

类ClientTable(tag:tag)扩展表[ClientRow](tag,“clients”){
def clientId=列[Long](“客户端id”,O.PrimaryKey,O.AutoInc)
...
超控def*=
(clientId、电话号码、名字、姓氏、trainerId、日期注册)(ClientRow.tuple、ClientRow.unapply)
}
我尝试编写以下函数,通过组合注入表和数据库依赖项:

type PersistClient[A TableQuery[A]=>ClientInfo=>Future[ClientId]
val persist:PersistClient[ClientTable]=db=>
客户=>
信息=>{
val action=clients.returning(
clients.map(+.clientId)+=toRow(info)
)
db.run(action.map)(constructId(u2;))
}
这里ClientInfo和ClientId只是带有数据的case类。
toRow
具有签名
ClientInfo=>ClientRow
,它将Info对象中的强类型/高度结构化数据转换为SQL的更原始的数据。
constructId
为日志可读性创建了一个字符串ID(我喜欢
id.client.

toRow
下,我得到以下错误:

类型不匹配;
找到:messager.Client.persistence.ClientRow
所需:长
奇怪的是,如果我在将依赖项注入包含此函数的类时编写相同的函数,那么:

val-persistClient:ClientInfo=>Future[ClientId]=info=>{
val action=clients.returning(clients.map(u.clientId))+=toRow(info)
db.run(action.map)(constructId(u2;))
}

这里的
clients
db
与以前的类型相同,只是作为依赖项而不是函数的输入被注入到类中。给出了什么?为什么我的好代码不能编译?

它看起来像
clients的参数。returning
是一个insert,返回更改的行数。这不正确我看不太对,和你的版本不一样。

天哪,我现在看到了!括号太狡猾了……谢谢!