Scala:通过函数 B 将函数 A 作为参数传递,函数 B 为函数 A 声明一个隐式参数



>假设我有 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)
...
}

相关内容

  • 没有找到相关文章

最新更新