elixir中的is_module保护条款

时间:2016-10-04 17:08:09

标签: elixir

我正在将模块传递给函数,并希望使用保护子句(函数被设计为:atom或module)传递给它。

如何检查函数中的参数是否为模块(如is_atom为原子?)

2 个答案:

答案 0 :(得分:3)

仅使用防护条款是不可能的。我会在函数体中使用Code.ensure_loaded?/1。除了在模块存在与否时返回true / false,如果它可以在代码路径中找到相应的beam文件,它还会尝试加载模块:

iex(1)> defmodule A do
...(1)> end
iex(2)> Code.ensure_loaded?(A)
true
iex(3)> Code.ensure_loaded?(B)
false
iex(4)> Code.ensure_loaded?(Map)
true
iex(5)> Code.ensure_loaded?(:maps)
true
# I created `a.beam` using `erlc` in the same folder as `iex` was started
iex(6)> Code.ensure_loaded?(:a) 
true

答案 1 :(得分:0)

模块名称是一个原子,所以除了检查is_atom之外,你要求的是不可能的。