【发布时间】:2020-04-15 11:50:09
【问题描述】:
抱歉,这将是一个有点菜鸟的问题。我有一个来自 slick 库的对象,其类型如下:
Query[(Rep[String], Rep[String]), (String, String), Seq]
我正在尝试编写一个接受查询作为参数的函数,尽管其中的序列长度不确定——也就是说,它也可以是:
Query[(Rep[String], Rep[String], Rep[String]), (String, String, String), Seq]
所以前两个组件包含三个元素而不是两个。我无法弄清楚这是如何完成的。我尝试了各种错误排列,例如Query[Product[Rep[String]], Product[String], Seq],但都无济于事,甚至我认为仅使用Any 的核选项也行不通。我的错误消息类似于
[error] found : Option[slick.driver.H2Driver.api.Query[(slick.driver.H2Driver.api.Rep[String], slick.driver.H2Driver.api.Rep[String]),(String, St
ring),Seq]]
[error] (which expands to) Option[slick.lifted.Query[(slick.lifted.Rep[String], slick.lifted.Rep[String]),(String, String),Seq]]
[error] required: Option[slick.driver.H2Driver.api.Rep[scala.concurrent.Future[List[String]]]]
[error] (which expands to) Option[slick.lifted.Rep[scala.concurrent.Future[List[String]]]]
[error] ReturnFunctions.completeQuery(db, query, serialize_and_send)
我认为我无法解决这个问题可能反映了对 scala、一般的强类型语言以及可能作为一个整体的计算缺乏一些基本的理解。在尝试将其传递给函数之前,我是否应该将此查询解析为更明确的形式?我还怀疑我没有正确解释原始类型 - 在这种情况下括号是什么意思?是不是 Query 期望接收三组参数,一个接一个,就像你做 fn(arg1)(arg2)(arg3) = ... 时一样?
感谢您对这个令人不安的困境的任何帮助。
【问题讨论】: