По порядку:
1) Нет. Функциональные литералы являются анонимными функциями. Здесь вы четко назначаете своему выражению имя. Как вы упоминаете позже, () => if (......) some(1) Else None
будет функциональным литералом. Если вы сделаете это в REPL, вы увидите, что буквально возвращает функцию :) Функциональные литералы не имеют имени, поэтому вы можете присвоить их значению / переменной. Вы можете прочитать об этом больше здесь:
Что такое литерал функции в Scala?
2) В этом случае не будет никакой разницы. Если бы вы делали анонимную функцию изнутри, компилятор интерпретировал бы это как экземпляр Function0
. Это называется ETA Expansion Это, однако, я считаю, лишает вас возможности указывать общие c типы. Подробнее о разнице здесь
3) Scala позволяет вызывать методы с нулевыми параметрами только по имени, иначе вы можете опустить круглые скобки. Таким образом, когда вы просто вызываете nextOption
, он оценивает функцию и возвращает результат.
4) Нет, не будет.
5) Как уже упоминалось в первом случае, это действительно будет анонимная функция, и вы увидите эту функцию в REPL