Elixir:is_function

时间:2017-05-04 07:16:27

标签: elixir

我想用is_function测试一些内置函数,但它失败了:

> add = fn a, b -> a + b end
#Function<12.118419387/2 in :erl_eval.expr/5>

> is_function add
true

> is_function is_function    # test itself
warning: variable "is_function" does not exist and is being expanded to "is_function()", please use parentheses to remove the ambiguity or change the variable name
  iex:27

如何测试内置函数?

2 个答案:

答案 0 :(得分:5)

您可以使用Kernel.function_exported?/3并传递模块名称,功能名称和arity来检查:

iex(1)> function_exported?(Kernel, :is_function, 1)
true
iex(2)> function_exported?(Kernel, :is_function, 2)
true
iex(3)> function_exported?(Kernel, :is_function, 3)
false
iex(4)> function_exported?(Kernel, :function_exported?, 3)
true

(所有可在Elixir中调用但不导入任何模块的函数,例如is_function+都在Kernel模块中定义。)

答案 1 :(得分:0)

除了@Dogbert所说的你还可以使用is_function(&is_function/1)检查范围内是否有这样的功能。由于Elixir中函数名和变量名之间没有区别,因此需要这样的语法。