我可以在 Elixir 的同一个库中使用函数别名吗?
Can I have an alias of function inside the same library in Elixir?
假设我有一个函数的定义:
def rename(src, dst) do
<do rename>
end
在我的 Elixir 库中,我可以在同一个库中创建:
alias rename, as: mv
以便用户何时可以在我的库中同时使用重命名和 mv 函数?
我能想到的最简单的方法是 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
请注意,这定义了另一个调用 foo/0
.
的函数 bar/0
如果您的方法接受参数:
您还需要在 defdelegate
:
中指定参数
defmodule MyModule do
def awesome_func(term, opts \ []) do
# Do Something
end
defdelegate badass_func(term, opts \ []), to: __MODULE__, as: :awesome_func
end
Elixir 1.11 的正确答案是否定的,函数不能有别名。
defdelegate
不会创建别名,而是创建另一个函数来调用您需要别名的函数。
假设我有一个函数的定义:
def rename(src, dst) do
<do rename>
end
在我的 Elixir 库中,我可以在同一个库中创建:
alias rename, as: mv
以便用户何时可以在我的库中同时使用重命名和 mv 函数?
我能想到的最简单的方法是 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
请注意,这定义了另一个调用 foo/0
.
bar/0
如果您的方法接受参数:
您还需要在 defdelegate
:
defmodule MyModule do
def awesome_func(term, opts \ []) do
# Do Something
end
defdelegate badass_func(term, opts \ []), to: __MODULE__, as: :awesome_func
end
Elixir 1.11 的正确答案是否定的,函数不能有别名。
defdelegate
不会创建别名,而是创建另一个函数来调用您需要别名的函数。