Различия между "вызовом по имени" и Function0 в Scala

Каковы различия между f: => R а также f: () => R? Кажется, они работают одинаково, но их типы несовместимы друг с другом.

1 ответ

Решение

Это совершенно разные вещи: f: => R - это тип параметра функции (очень специфический - см. это обсуждение), f: () => R - это простая функция. Кажется, они работают одинаково - потому что они действительно работают одинаково - они рассчитывали каждый раз, когда вы им звоните. Преимущество параметров вызова по имени заключается в том, что они не оцениваются, если они не используются в теле функции (и что они вычисляются при использовании их в функции, а не при их объявлении или вызове - только при оценке этой части функции, где вы используете эти конкретные параметры). Также смотрите это (официальное описание от scala-lang.org)

Другие вопросы по тегам