>假设我有 2 个方法,A、B 和 4 个类,C、D、E、T。
def A(c: C)(implicit t: Request[T]): D { ... }
def B(fn: C => D): E {
implicit val t // I have to declare implicit val for A here
fn(c)
...
}
然后我想调用以 A 作为参数的方法 B
B(A)
但是在B(A(行有一个错误"在这里找不到任何HTTP请求">
我只想像要在方法 B 中执行的参数一样传递函数 A,而不是在调用方法 B 时传递函数 A。
我尝试像这样显式声明 t,它有效
def A(c: C, t: Request[T]): D { ... }
def B(fn: C => D): E {
fn(c, t)
...
}
但我真的想让它隐含
有没有办法做到这一点??
要在呼叫站点获得B(A)
,例如
def B(fn: C => Request[T] => D): E = {
val t = ... // no point making it implicit unless you use it elsewhere
fn(c)(t)
...
}
应该可以工作(我目前无法检查,但如果不能,也请尝试B(A _)
(。
但是你仍然失去了B
内心的隐含。为了避免这种情况,你需要隐式函数类型,而当前的 Scala 不支持这些类型。
你试过这个吗?当您调用 A 时,您的隐式需要在范围内,所以我认为这将起作用:
def A(c: C)(implicit t: Request[T]): D { ... }
def B(fn: C => D)(implicit t: Request[T]): E {
fn(c)
...
}