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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala:覆盖采用隐式参数的方法的首选方法?相关的知识,希望对你有一定的参考价值。

鉴于该方法,例如,

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)

(注意,我知道我的示例覆盖什么都不做;我只是想让问题保持简单。想象一下,我正在添加一个日志语句。)

答案

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

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

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

以上是关于Scala:覆盖采用隐式参数的方法的首选方法?的主要内容,如果未能解决你的问题,请参考以下文章

Scala隐式转换

隐式方法参数解析? Scala编译器?

Scala隐式转换

Scala基础高阶函数隐式转换AKKA编程

转载:深入理解Scala的隐式转换系统

scala中的implicit