如何在Scala中添加隐式curried参数?

时间:2016-01-11 20:17:57

标签: scala functional-programming slick scalaz

我使用带有以下方法签名的DAO库(ActiveSlick):

def save(entity: Entity)(implicit exc: ExecutionContext): DBIO[Entity]

等。大多数人都有一个隐含的exc参数。

我正在扩展该类,并希望将ExecutionContext附加到预定义的内容,例如:implicit val context = Contexts.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参数,以便调用始终是干净的(呃):

dao.run (dao.insert (entity))

我听说Reader monad可以做类似的事情......但是对它进行调整证明相当困难。

谢谢!

1 个答案:

答案 0 :(得分:0)

定义如下所示的特征,并在需要的地方混合:

trait ExeContext {
  implicit def exe: ExecutionContext
  //Methods that use the implicit exe
}