我對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
。
謝謝。
小記:你應該使用to_existing_atom只要有可能。原子沒有收集垃圾! –
謝謝!我不知道原子不是垃圾收集。將編輯我的答案。 – lschuermann