Как прочитать цепочку параметров функции Scala - PullRequest
14 голосов
/ 29 декабря 2011

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

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

1 Ответ

13 голосов
/ 29 декабря 2011
  1. action - функция передачи по имени, которая принимает String и возвращает String.
  2. action - функция передачи по имени, которая ничего не беретчтобы вернуть функцию, которая принимает String и возвращает String

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

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

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

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

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