我可以在Elixir的同一个库中使用别名吗?

Low*_*ong 11 elixir

说我有一个函数的定义:

def rename(src, dst) do
   <do rename>
end
Run Code Online (Sandbox Code Playgroud)

在我的Elixir库中,我可以在同一个库中创建:

alias rename, as: mv  
Run Code Online (Sandbox Code Playgroud)

那么当用户可以在我的库中使用重命名和mv函数时?

sas*_*ric 20

我能想到的最简单的方法是通过defdelegate

iex(1)> defmodule Foo do
...(1)>   def foo, do: :foo
...(1)>
...(1)>   defdelegate bar, to: __MODULE__, as: :foo
...(1)> end

iex(2)> Foo.foo
:foo
iex(3)> Foo.bar
:foo
Run Code Online (Sandbox Code Playgroud)

请注意,这定义了另一个bar/0调用的函数foo/0.


She*_*yar 5

如果您的方法接受参数:

您还需要在以下位置指定参数defdelegate:

defmodule MyModule do
  def awesome_func(term, opts \\ []) do
    # Do Something
  end

  defdelegate badass_func(term, opts \\ []), to: __MODULE__, as: :awesome_func
end
Run Code Online (Sandbox Code Playgroud)