erlang - 如何在Erlang中动态调用模块?

标签 erlang

假设我有两个模块a.erlb.erl。这两个模块都包含相同的功能(在 Java 中我会说“两个类都实现相同的接口(interface)”)。 在模块“c.erl”中,我想要一个函数返回模块“a”或“b”(取决于参数)

这是我想要在模块 c.erl 中拥有的内容

-module(c)

get_handler(Id) ->

 % if Id == "a" return a

 % if Id == "b" return b

test() ->

 get_handler("a"):some_function1("here were go for a"),

 get_handler("a"):some_function2("aaaa"),

 get_handler("b"):some_function1("here we go for b")

我怎样才能做到这一点?我对 Erlang 比较陌生,不知道该怎么做。在 Java 中,这非常明显,因为您只是返回类的新实例。

最佳答案

只需让 get_handler/1 以原子形式返回模块名称,然后用它来调用所需的函数:

(get_handler("a")):some_function2("aaaa"),
(get_handler("b")):some_function1("here we go for b").

请注意,在这种情况下,您需要在对 get_handler/1 的调用两边加上括号。

模块 abget_handler/1 的简单版本可能是:

get_handler("a") -> a;
get_handler("b") -> b.

关于erlang - 如何在Erlang中动态调用模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34579048/

相关文章:

c# - 与 C# 程序通信 Erlang 服务器

windows - Windows XP 上的 rabbitmqctl.bat : unable to connect to node rabbit@MYPCNAME: nodedown

erlang - 如何在 Erlang 中替换双引号

html - 如何向按钮添加工具提示

erlang - Erlang 中的 "new"是官方标准的一部分吗?我们应该使用它吗?

java - 分布式Erlang,如何生成唯一的节点名称?

erlang - Erlang 有哪些分布式进程注册表可用?

macos - Riak 在 OSX 安装上占用 100% CPU

ssl - 进程收到套接字关闭消息之前的时间

Erlang:通过主管启动时 gen_server 崩溃