Scala:重写采用隐式参数的方法的首选方法?

时间:2018-10-31 02:42:42

标签: scala implicit

给出方法,例如

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)

(请注意,我知道我的示例重写无济于事;我只是想使问题保持​​简单。想象一下,我要添加一条日志语句。)

1 个答案:

答案 0 :(得分:3)

您的问题不是真正的关于如何重写方法的问题,而是关于在方法具有super参数时如何调用方法的implicit实现的问题。这里也有一些见解,所以这只是我的观点:

您应该将其视为使用implicit参数对任何其他函数的调用。也就是说,除非有特定的原因指定,否则您将省略implicit参数。指定implicit值的主要原因是范围内没有合适的值,并且比为单个调用创建新的implicit val更简单。如果适当的implicit val已经在范围之内,我看不出有任何充分的理由明确地传递它。

因此,在您的特定情况下,我会隐式传递timer