在我目前的项目中,我们有一个特征如下的特征:
trait MyTrait {
def foo(bar: Request => IntermediateResult): Result = {
val request: Request = ???
bar(request).toResult(request)
}
}
但在某些情况下,我们需要直接返回Result
的实例。所以我想我可以简单地更改foo
方法的签名以获取类型为Request => Result
的函数参数,并提供从Request => IntermediateResult
函数到Request => Result
的隐式转换:< / p>
implicit def intermediateResult2Result(handle: Request => IntermediateResult)(implicit request: Request) =
handle.andThen(_.toResult(request))
但是,这要求request
实例隐式可用。所以我的想法是将foo
重写为:
def foo(bar: Request => Result): Result = {
implicit val request: Request = ???
bar(request)
}
但是,现在对foo
的调用现在应该包含implicit request
参数,而不仅仅是普通request
。有没有办法解决这个限制?
答案 0 :(得分:0)
你不需要这么复杂。只需添加另一种foo
def foo(bar: Request => IntermediateResult) = bar(request).toResult
def fooBar(bar: Request => Result) = bar(request)
答案 1 :(得分:0)
如果您以稍微不同的方式制定隐式转换,则不再需要隐式参数:
implicit def intermediateResult2Result(handle: Request => IntermediateResult): Request => Result =
{request: Request => handle(request).toResult(request)}