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

时间:2015-03-04 19:20:32

标签: elixir

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

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

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

由于

1 个答案:

答案 0 :(得分:6)

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

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中,不可能定义两个具有相同名称和arity的函数。