У меня есть функция синхронизации:
def time[R](code: => R, t: Long = System.currentTimeMillis()) =
(code, System.currentTimeMillis() - t )
Возвращает кортеж возвращаемого значения кода и время выполнения кода.
У меня есть черта разных вещей, которые я синхронизирую по нескольким объектам:
trait TimingStats {
var step1Time, step2Time, step3Time : Long
}
У меня есть объект, который делает то, что я рассчитываю:
class Process extends TimingStats {
var (step1Result, step1Time) = time(Thread.sleep(1000))
var (step2Result, step2Time) = time(Thread.sleep(2000))
var (step3Result, step3Time) = time(Thread.sleep(3000))
}
(Конечно, Thread.sleep
на самом деле является полезным кодом, а не просто директивой сна)
Но это не работает, если компилятор не может выполнить переменную «step1Time нуждается в модификаторе override».
Как мне на самом деле пытаться это сделать?
PS - Более широкий контекст заключается в том, что я затем сообщаю эту статистику в Prometheus как часть мониторинга приложений, на случай, если вы собираетесь предложить вместо этого различные инструменты профилирования.