2015-03-04 4 views
1

Я новый эликсир и действительно наслаждаюсь им. Я ударил стену, пытаясь использовать функции с тем же именем. Вот примерКак запустить функции с тем же именем?

defmodule ChangeName do 
    def convert(:captilize, name), do: String.capitalize(name) 
    def convert(:lower, name), do: String.downcase(name) 
end 

Я использую ионообменную и основные вызовы, где ChangeName.convert.captilize но как я бегу эти функции?

Благодаря

+0

Также см. Этот вопрос и ответы для получения более подробной информации об этом: http://stackoverflow.com/questions/23600513/elixir-function-overloading-with-different-arity –

ответ

6

пример вы даете не определяет две функции с тем же именем, но одна функция multiclause. Это примерно эквивалентно:

defmodule ChangeName do 
    def convert(conversion, name) do 
    case conversion do 
     :capitalize -> String.capitalize(name) 
     :lower -> String.downcase(name) 
    end 
    end 
end 

и называется соответственно:

ChangeName.convert(:capitalize, "john") 
ChangeName.convert(:lower, "JOHN") 

На самом деле в Erlang это невозможно определить две функции, которые имеют такое же имя и арность.

Смежные вопросы