Scala中:传递函数A通过函数B的参数其中B声明一个隐式参数为函数的
假设我有2种方法中,A,B,和4类,C,d,E,T。Scala中:传递函数A通过函数B的参数其中B声明一个隐式参数为函数的
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)
...
}
然后,我想用一个调用方式B作为参数
B(A)
但有一个错误“无法在这里找到任何HTTP请求”在行B(A)
我只是想通过功能像一个参数要在中执行方法B,不是当我调用方法B.
我想声明牛逼明确这样的,它的工作原理
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
内失去隐含性。为了避免这种情况,你需要implicit function types,这是目前斯卡拉不支持的。
它的工作原理。实际上,我在fn中有一个函数,它使用t作为一个隐式参数,这就是为什么我需要它是隐式的。顺便说一句,这也帮助我。非常感谢你。 –
你试过吗?你隐需要在范围上,当你调用,所以我认为这将工作:
def A(c: C)(implicit t: Request[T]): D { ... }
def B(fn: C => D)(implicit t: Request[T]): E {
fn(c)
...
}
它不起作用。我需要在方法B中声明方法A的隐式val,所以当我调用B(A)时,没有任何隐式声明在范围中,但我也不希望方法A在B行被执行(A )。我认为它应该工作,因为我只是在B行(A)传递方法A,当我在方法B中声明隐式的val时,我会调用A. –
'T'从哪里来?我没有看到它在任何地方宣布。 –
@YuvalItzchakov谢谢。我忘了把它放在帖子里。 –