Scala: функция для измерения времени выполнения любой другой функции - PullRequest
0 голосов
/ 05 марта 2020

Я хочу написать функцию, которая печатает время выполнения любой другой функции, которая принимает в качестве аргумента наряду с параметрами. Пример моей идеи в python для лучшего понимания:


def runtimer(func , *args, **kwargs):
    start = time.time()
    result = func(*args, **kwargs)
    print(time.time() - start)
    return result


runtimer(time.sleep, 1)

Output: 1.000108242034912

Я пытаюсь использовать параметр val: _*, но он реализует «все или ничего». По-другому я проверил print функцию в источнике scala github, но я не нашел ничего подходящего для моего вопроса.

Я хотел бы знать, возможно ли это решить на scala или получить любой совет. Также будет полезна реализация java.

Спасибо!

UPD: я оставлю здесь несколько наиболее полезных ссылок: первая для наиболее похожей реализации, вторая максимальная для вычисления времени выполнения JVM (по комментариям): 1) Как профилировать методы в Scala? 2) Scala: функция для измерения времени выполнения любой другой функции

Вопрос еще открыт, жду обсуждений

1 Ответ

0 голосов
/ 06 марта 2020

Чтобы решить вашу проблему, вы должны использовать HOF (функции высшего порядка). Это функции, которые принимают другие функции в качестве параметров. Вот пример того, как это можно сделать для функции с одним параметром.

 def measure(yourFunction: (Int) => Int, arg1: Integer): Double = {
   val startTime = System.nanoTime()
   yourFunction(arg1)
   System.nanoTime() - startTime 
 }

Как видите, эта функция измеряет время для функций, которые принимают Int в качестве параметра и возвращают Int. Я перевел ваш Python код Scala

NJ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...