Scala:覆盖采用隐式参数的方法的首选方法?

Scala: preferred way to override a method that takes an implicit argument?

给定方法,例如,

def delayed(howlong: Duration)(implicit timer: Timer): Future[A] 

覆盖它的首选方法是什么,保持隐式隐式,还是显式?

这重要吗,还是保持隐式只是将糖分转化为显式?

override def delayed(howlong: Duration)(implicit timer: Timer): Future[A] 
   = super.delayed(howlong)

override def delayed(howlong: Duration)(implicit timer: Timer): Future[A] 
   = super.delayed(howlong)(timer)

(注意,我知道我的示例重写什么都不做;我只是想让问题简单化。假设我正在添加一个日志语句。)

你的问题实际上不是关于如何覆盖方法,而是关于当方法有 implicit 参数时如何调用方法的 super 实现。这里也有一点意见,所以这只是我的看法:

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

所以在你的具体情况下,我会隐式地传递 timer