Elixir是否提供了开箱即用的函数来推断子模块名称?

时间:2018-03-29 15:56:32

标签: elixir

此代码按预期工作:

defmodule Module.Tools do
  def add_path(module, suffix) do
    (String.Chars.to_string(module) <> "." <> suffix) |> String.to_existing_atom
  end
end

这只是一个例子(没有警卫,没有匹配......你明白)。我可以使用它来自动发现子模块(即使像子模块这样的东西没有正确存在,也可以认为A.BA的子模块。我可以像这样使用这个函数:

scoring_submodule = Module.Tools.add_path(base_module, "Scoring")
scoring_submodule.calculate(...)

我的问题是: Elixir是否提供了一个开箱即用的功能?

1 个答案:

答案 0 :(得分:2)

是的,Module.concat采用原子列表或两个原子并连接起来:

iex(1)> Module.concat(String, Chars).to_string(123)
"123"
iex(2)> Module.concat([String, Chars]).to_string(123)
"123"