【发布时间】:2014-09-23 15:23:57
【问题描述】:
我有一个函数create将提供op: DSLContext => T的参数DSLContext:
def create[T](op: DSLContext => T)(implicit errorHandler: Throwable => Unit):Option[T] = {
...
op(new DSLContext)
...
}
然后我将以下函数传递给create:
def query(implicit dsl:DSLContext)
这是电话
create(query)
我得到了这个编译器错误:
找不到参数 dsl 的隐式值:org.jooq.DSLContext [错误] 创建(查询)
我可以这样解决这个问题:create {implicit dsl => query}
但是我想知道为什么编译器无法将隐式参数 dsl 解析为给定参数?
【问题讨论】:
-
你需要
DSLContext => T,你通过DSLContext并得到一个错误。当你通过DSLContext => T时,没有错误。怎么了? -
相同。不太确定你在期待什么。
-
@JeanLogeart 查询是 DSLContext => T,而不仅仅是 DSLContext。因此,当我将查询作为 create 的参数传递时,我传递了一个采用 DSLContext 并返回 T 的函数。
-
他想将方法引用而不是匿名函数传递给
create。query就是那个方法。换句话说,他想部分应用带有隐式参数的方法,这就是编译器感到困惑的地方。 -
@Hexx 我建议您修改
query以采用普通(非隐式)参数,并将其分配给本地implicit val。def query(dsl: DSLContext) = { implicit val idsl = dsl; ... }.