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:覆盖采用隐式参数的方法的首选方法?的主要内容,如果未能解决你的问题,请参考以下文章