Я забавляюсь языком программирования, и его синтаксис находится под сильным влиянием Scala, в частности определений функций.
Я столкнулся с проблемой проектирования, потому что мой язык не различает функции, определенные с помощью def
синтаксиса (методы класса), и анонимные функции, назначенные значениям (созданные с использованием =>
) - он устраняет различия как в реализации, так и в поведении .
В результате два следующих определения означают одно и то же:
def square(x: Int) = x*x
val square = (x: Int) => x*x
Нет смысла использовать последнюю форму (немедленное анонимное назначение функции) в любой нормальной ситуации - ее просто можно использовать вместо def
формы.
Повлияет ли наличие такого дублирующего синтаксиса для определения именованных функций на ортогональность языка или какой-либо другой аспект дизайна?
Я предпочитаю это решение, потому что оно допускает короткие и интуитивно понятные определения методов и именованных функций (через def
), а также короткие определения анонимных функций (используя =>
).
Редактировать: Scala делает различие между двумя - анонимные функции не совпадают с методами, определенными def
в Scala. Различия относительно невелики - смотрите посты, на которые я ссылался ранее.
val
нотацию?
fun
для определения рекурсивной функции.
def
. Это просто побочный эффект того факта, что анонимная функция, скажем, (x : Int) => x + 1
является объектом, и объектам можно присвоить значения с помощью val f = ...
. Разработчики языка должны были бы выйти из их пути , чтобы запретить синтаксис. Это не совсем то же самое, что явно приложить усилия для поддержки двух разных синтаксисов, которые делают (приблизительно) одно и то же.
However, assigning existing functions
кажется, отсутствует конец предложения