如此处所述
我有一个带有以下签名的方法
def execute[T <: Record](funs: Seq[(Session) => T]): Seq[T]
Slick数据库会话Session
在哪里;该方法的基本实现是
def execute[T <: Record](funs: Seq[(Session) => T): Seq[T] = {
db withSession {
session: Session => funs.map(fun => fun(session))
}}
(其中db
是 Slick Database
)以及添加诸如日志记录、缓存、多线程等内容的其他实现。特别是,多线程实现用于funs.grouped(ceil(funs.size / threadCount)).map(funs => Future {})
在多个线程之间划分功能。
我想创建一个接受函数元组的方法版本,以便我可以返回不同类型的值 - 如上面链接的问题中所述,我不知道将元组拆分为更小的好方法元组,然后重新组合多线程案例的结果,但该问题的答案是使用Shapeless库的HList
s - 但是我不清楚如何创建(Session) => T
函数的多态变体,问题是所有我见过的多态函数的示例使用包装类型参数,例如(Set ~> Option)
,每个都包装一个 polymorphic T
,但我正在尝试创建一个(Session ~> T)
函数,其中Session
不变且多态T
不包含在Set
orOption
等等。由于对Shapeless没有足够的经验,我无疑以错误的方式看待这个问题。
如何使用 Shapeless 创建def execute(funs: Seq[(Session) => T]): Seq[T]
函数的多态版本?