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
。
给定方法,例如,
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
。