如何运行具有相同名称的函数?

Nai*_*air 1 elixir

我是新的Elixir,非常享受它.当我尝试使用同名函数时,我碰壁了.这是一个例子

defmodule ChangeName do
  def convert(:captilize, name), do:  String.capitalize(name)
  def convert(:lower, name), do: String.downcase(name)
end
Run Code Online (Sandbox Code Playgroud)

我正在使用iexChangeName.convert.captilize的基本调用但是如何运行这些函数?

谢谢

Paw*_*rok 6

您提供的示例未定义具有相同名称的两个函数,而是单个多重函数.它大致相当于:

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

因此被称为:

ChangeName.convert(:capitalize, "john")
ChangeName.convert(:lower, "JOHN")
Run Code Online (Sandbox Code Playgroud)

实际上在Erlang中,不可能定义两个具有相同名称和arity的函数.