给出方法,例如
def delayed(howlong: Duration)(implicit timer: Timer): Future[A]
重写它们,保持隐式隐式或使其显式的首选方法是什么?
然后重要吗?还是将其保留为隐含的只是将糖去除为显性的?
override def delayed(howlong: Duration)(implicit timer: Timer): Future[A]
= super.delayed(howlong)
OR
override def delayed(howlong: Duration)(implicit timer: Timer): Future[A]
= super.delayed(howlong)(timer)
(请注意,我知道我的示例重写无济于事;我只是想使问题保持简单。想象一下,我要添加一条日志语句。)
答案 0 :(得分:3)
您的问题不是真正的关于如何重写方法的问题,而是关于在方法具有super
参数时如何调用方法的implicit
实现的问题。这里也有一些见解,所以这只是我的观点:
您应该将其视为使用implicit
参数对任何其他函数的调用。也就是说,除非有特定的原因指定,否则您将省略implicit
参数。指定implicit
值的主要原因是范围内没有合适的值,并且比为单个调用创建新的implicit val
更简单。如果适当的implicit val
已经在范围之内,我看不出有任何充分的理由明确地传递它。
因此,在您的特定情况下,我会隐式传递timer
。