我编写了一个Erlang模块,其中并未直接调用所有内部函数.相反,有几个函数看起来像这样:
weird_func(Cmd, Args) ->
?MODULE:Cmd(Args).
Run Code Online (Sandbox Code Playgroud)
这是一个简化的例子,但你明白了.Erlang编译器会发出有关未使用函数的警告,实际上它们实际上是使用的,而不是直接使用.有没有办法抑制这些警告?理想情况下,我不想压制所有这些警告,而是我想告诉Erlang编译器将一些特定函数视为特殊情况.
小智 15
有一个专门用于此的编译选项:
http://www.erlang.org/doc/man/compile.html
所以,为你的例子插入一个这样的指令:
-compile([{nowarn_unused_function, [{ wierd_function_1,Arity1 },
... ]}]).
Run Code Online (Sandbox Code Playgroud)
但是上面关于编译器默默地丢弃函数的警告仍然是我所知道的.
cth*_*ops 11
这不仅仅是抑制警告的问题.无法以您想要的方式调用未导出的函数.
-module(foo).
-export([f/0]).
f() -> ?MODULE:g().
g() -> ok.
1> c(foo).
./foo.erl:4: Warning: function g/0 is unused
{ok,foo}
2> foo:f().
** exception error: undefined function foo:g/0
Run Code Online (Sandbox Code Playgroud)
编译器可以完全放弃未使用的,未导出的函数.只需使用?MODULE:F语法导出使其可用的函数.
如果某个函数既未导出也未显式调用,则报告为未使用.所以你有两种方法:
1)导出间接使用的函数.如果您不希望从模块外部调用这些函数,可以在文档中(以及注释中)突出显示这些函数.
2)在weird_func中显式调用每个函数:
weird_func(fun1, [A1,A2]) ->
fun1(A1, A2);
weird_func(fun2, []) ->
fun2();
weird_func(fun3, [A1,A2,A3]) ->
fun3(A1,A2,A3).
Run Code Online (Sandbox Code Playgroud)
后者有点冗长,但如果用户调用不存在的函数,它将为用户提供更好的错误