Как читать цепочку параметров функции Scala

Я пытаюсь прочитать список параметров из следующих двух функций:

1. def foo(action: => String => String) = "bar"
2. def foo(action: => () => String => String) = "bar"
  • Функция с именем "foo", которая получает функцию с именем "действие", которая получает/возвращает
  • Функция с именем "foo", которая получает функцию с именем "действие", которая возвращает функцию, которая возвращает символ

Ответы

Ответ 1

  • action - это функция pass-by-name, которая принимает String и возвращает String.
  • action - это переданная по имени функция, которая не принимает ничего, чтобы вернуть функцию, которая принимает String и возвращает String

Теперь вы можете спросить: "Ну, что это значит, что параметр передается по имени?" Хорошо... это совсем другая червь из червей. В принципе, передаваемый по имени параметр оценивается только тогда, когда он используется в функции, и каждый раз, когда он используется в функции. То, что это позволяет, является чем-то вроде короткого замыкания, как следует

def orOperator(left: Boolean, right: => Boolean) : Boolean = if (left) true else right

В этом случае оператор будет замыкаться (и заканчивать без вычисления/оценки right), если он найдет left как истину.

Итак... у вас с этими параметрами что-то похожее. Это функции, которые не оцениваются по какой-либо причине, если/пока они не будут указаны в теле функции. Я не понимаю мотивацию для этого, но... как это. Надеюсь, что это поможет.