Почему в эликсире есть два вида функций?

Я изучаю эликсир и удивляюсь, почему у него есть два типа определения функций:

функции, определенные в модуле сdefназывается с помощьюmyfunction(param1, param2)анонимные функции, определенные сfnназывается с помощьюmyfn.(param1, param2)

Только функция второго типа представляется объектом первого класса и может быть передана в качестве параметра другим функциям. Функция, определенная в модуле, должна быть заключена вfn, Там'какой-то синтаксический сахар, который выглядит какotherfunction(myfunction(&1, &2)) чтобы сделать это легко, но зачем это нужно в первую очередь? Почему можнот мы просто делаемotherfunction(myfunction))? Разрешено ли вызывать функции модуля без скобок, как в Ruby? Похоже, что он унаследовал эту характеристику от Erlang, который также имеет функции и функции модуля, так что это на самом деле происходит от того, как Erlang VM работает внутри?

Есть ли какая-то польза от наличия двух типов функций и преобразования из одного типа в другой, чтобы передать их другим функциям? Есть ли польза от двух разных обозначений для вызова функций?

Ответы на вопрос(6)

Ваш ответ на вопрос