Если под «искажением имен» вы подразумеваете концепцию из С++, то нет, я не думаю, что они это делают.
В Erlang или Elixir нет перегрузки функций. (Я пытался найти источник, чтобы указать вам, но поверьте мне — его там просто нет.) Функции выбираются только по арности, и одно и то же имя функции с двумя разными арностями — это две разные функции. f/0 отличается от f/1, который отличается от f/2. Как указал @zxq9 в комментариях, из-за этого свойства в Erlang или Elixir также нет переменной арности, хотя это можно смоделировать, передав списки в качестве параметров.
В этой части документации по Erlang обсуждается, как Erlang определяет, к какой функции обращаться. В то время как механизм ниже тот же самый для Эликсира, синтаксис отличается.
person
Onorio Catenacci
schedule
11.11.2015
name/arity
является конкретным, явным идентификатором, и его нельзя обойти. Как и в таких языках, как Python, в которых, кажется, отсутствует функция X или Y, упущение здесь является признаком преднамеренного проектирования, а не импульсивного выбора, и является центральным в том, как программисты думают о языке. Вот почему я думаю, что это хороший вопрос - возможно, если перефразировать, это будет отличный вопрос. - person zxq9   schedule 15.11.2015Args1 = [1,2,3]
иArgs2 = [1,2]
и две функцииfoo/2
иfoo/3
. Вы можете сделатьapply(Fun, Args1)
илиapply(Fun, Args2)
, и будет выбрано подходящее, что оставляет дверь широко открытой для эффективного вариативного или каррированного каскада функций defs. Просто наблюдайте за своими типами и делайте диализ. - person zxq9   schedule 15.11.2015