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