Я забавляюсь языком программирования, и его синтаксис находится под сильным влиянием 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кажется, отсутствует конец предложения