如何在Scala中附加隐式curried参数?
我正在使用具有以下方法签名的DAO库(ActiveSlick):如何在Scala中附加隐式curried参数?,scala,functional-programming,slick,scalaz,Scala,Functional Programming,Slick,Scalaz,我正在使用具有以下方法签名的DAO库(ActiveSlick): def save(entity: Entity)(implicit exc: ExecutionContext): DBIO[Entity] 大多数都有一个隐含的curriedexcparam 我正在扩展该类,并希望将ExecutionContext附加到预定义的内容,例如:implicit val context=context.dbContext 此外,我还将纯方法包装在一个 def run[S] (action: DBI
def save(entity: Entity)(implicit exc: ExecutionContext): DBIO[Entity]
大多数都有一个隐含的curriedexc
param
我正在扩展该类,并希望将ExecutionContext附加到预定义的内容,例如:implicit val context=context.dbContext
此外,我还将纯方法包装在一个
def run[S] (action: DBIO[S]): Future[Try[S]] = db.run(action.asTry)
然而,隐式上下文并没有被客户机代码接受
我能做的是:
def run[S] (action: ExecutionContext => DBIO[S]): Future[Try[S]] = db.run(action(context).asTry)
但这很难看,因为我必须在客户机代码中明确使用:
dao.run (dao.insert(entity)(_))
我的问题是,我是否可以在类中附加隐式的ExecutionContext
参数,以便调用总是干净的(er):
我听说阅读器
monad可以做这样的事情。。但事实证明,摸索是相当困难的
谢谢 定义如下特征,并在任何需要的地方进行混合:
trait ExeContext {
implicit def exe: ExecutionContext
//Methods that use the implicit exe
}
我不想覆盖所有的方法,但要找到问题的通用解决方案。通过覆盖,我的意思是,例如:
覆盖def insert(entity:entity)(隐式ctx:ExecutionContext)=super.insert(entity)(context)
对不起,def应该是:。。。(implicit-ctx:ExecutionContext=someDefinedCtx)
不幸的是,这不会将隐式方法传播到方法调用站点。一个复杂的情况可能是我在描述一个基类,但我也在子类中添加了一个隐式上下文——但在调用站点上仍然缺少它。每次我找不到另一个解决方案时,都无法导入它。
trait ExeContext {
implicit def exe: ExecutionContext
//Methods that use the implicit exe
}