Scala: предпочтительный способ переопределить метод, который принимает неявный аргумент? - PullRequest
0 голосов
/ 31 октября 2018

Учитывая метод, например,

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

Каков предпочтительный способ переопределения, сохранения неявного или неявного?

И имеет ли это значение или делает неявное явным просто де-сахар явным?

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

OR

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

(Обратите внимание, я знаю, что мои примеры переопределений ничего не делают; я просто пытаюсь упростить вопрос. Представьте, что я добавляю оператор журнала.)

1 Ответ

0 голосов
/ 31 октября 2018

Ваш вопрос на самом деле не о том, как переопределить метод, а о том, как вызвать реализацию метода super, когда метод имеет implicit параметры. Здесь также есть элемент мнения, так что это только мое мнение:

Вы должны рассматривать это как вызов любой другой функции с параметрами implicit. То есть вы пропускаете аргумент implicit, если для его указания нет особой причины. Основная причина указания значения implicit заключается в том, что в области действия нет подходящего значения, и это проще, чем создание нового implicit val для одного вызова. Если соответствующий implicit val уже находится в области видимости, я не вижу веской причины для его явной передачи.

Так что в вашем конкретном случае я бы неявно передал timer.

...