我想用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
如何测试内置函数?
答案 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中函数名和变量名之间没有区别,因此需要这样的语法。