【发布时间】:2016-08-09 07:54:01
【问题描述】:
我对 Elixir 和函数式编程语言很陌生。
在 Elixir 中,我想调用模块上的一个特定函数,给定模块名称为字符串。
我有以下(非常糟糕的)代码可以正常工作,这几乎可以满足我的要求:
module_name = elem(elem(Code.eval_file("module.ex", __DIR__), 0), 1)
apply(module_name, :helloWorld, [])
这(至少据我了解)编译当前目录中module.ex 的(已经编译的)模块。我正在从两个元组中提取模块名称(不是字符串,不知道它实际上是什么数据类型)并在其上运行方法helloWorld。
这段代码有两个问题:
它会打印类似
redefining module Balance的警告。我当然不希望在生产中发生这种情况。AFAIK 此代码编译
module.ex。但由于 module.ex 已经编译和加载,它不希望发生这种情况。
我不需要通过文件名调用这些模块上的方法,模块名也可以。但它确实必须通过动态,例如。在命令行输入“Book”应该,在检查模块是否存在后,调用函数Book.helloWorld。
谢谢。
【问题讨论】:
标签: dynamic module load elixir