我使用DAO庫(ActiveSlick)用以下方法簽名:如何在Scala中添加隱式curried參數?
def save(entity: Entity)(implicit exc: ExecutionContext): DBIO[Entity]
等多數有一個隱含的咖喱exc
PARAM。
我在擴展這個類,並且想要將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))
我聽說monad可以做這樣的事情..但是grokking它證明相當困難。
謝謝!
我不想重寫所有的方法,但是找到一個通用的解決問題的辦法。通過覆蓋我的意思,例如:'重寫def插入(實體:實體)(隱式ctx:ExecutionContext)= super.insert(實體)(上下文)' – vivri
抱歉,def應該是:'...(隱式ctx:ExecutionContext = someDefinedCtx )' – vivri