function - 通过名称和参数调用函数

标签 function erlang arity

我正在尝试编写一个调用具有指定名称和参数的函数的函数:

my_fun(FunctionName, Arity) ->
    %Call FunctionName/Arity 
.

所以这样调用它:

my_fun(foo, 3)

应该调用函数 foo/3

问题是,如果只指定了名称和元数,我不知道如何调用函数。我尝试调用的函数保证存在于我尝试调用它的同一模块中。

是否可以在 Erlang 中实现它,如何实现?

最佳答案

你可以使用 erlang:apply/3 ,第一个参数是 ?MODULE 来引用同一个模块,第二个是函数的名称原子,第三个是包含 Arity 元素的列表:

-module(a).
-compile(export_all).

my_fun(FunctionName, Arity) ->
  apply(?MODULE, FunctionName, lists:seq(1, Arity)).

foo(A, B, C) ->
  io:format("~p ~p ~p~n", [A, B, C]).

bar(A, B) ->
  io:format("~p ~p~n", [A, B]).

main() ->
  my_fun(foo, 3),
  my_fun(bar, 2).

输出:

1> c(a), a:main().
1 2 3
1 2

关于function - 通过名称和参数调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922048/

相关文章:

erlang - 我的 gen_server 实现有什么问题?

function - 我可以将任意函数传递给 Scala 中的另一个函数吗?

c - 如何链接这两个函数

javascript - 如何将函数作为方法添加到返回的数组?

Javascript if/else 语句未按预期工作

testing - 为什么 ets 表在 ct :init_per_testcase but not init_per_suite? 中存活

c++ - 递归模板?

erlang - 使用 rebar 编译依赖项的自定义命令

java - 为什么这个 Java 方法调用被认为是不明确的?

clojure - 在 clojure 中覆盖代理中的多元方法