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

问题描述 投票:2回答:1

鉴于该方法,例如,

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)

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

scala implicit
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.