我有一个头文件,里面有一些功能。 它意味着可扩展性;)
在这个头文件中,我使用-spec
作为我的函数。
因为我的头文件包含在多个erl文件中并且具有一些未被所有erl文件使用的功能,所以我得到了没有使用的函数的警告(正在使用但在另一个erl文件中)。
例如:
我在这个例子中得到一个模块a
的警告:函数headerExecute没有被使用,而模块c
没有使用函数headerCount。
%% Shell %%
BPid = b:create(),
APid = a:create(BPid),
CPid = c:create(BPid).
-module(a).
-export([create/1, count/2, stop/1]).
-export([loop/1]).
-include("header.hrl").
create(Id) ->
spawn(?MODULE, loop, [Id]).
count(Pid, Counter) ->
Pid!{count, Ref = make_ref(), self(), Counter},
receive
{Ref, Result} -> Result
end.
stop(Pid) ->
Pid!{stop}.
loop(Id) ->
receive
{count, Ref, From, Counter}
Result = headerCount(Id, Counter),
From!{Ref, Result},
?MODULE:loop(Id);
{stop} ->
ok;
_ ->
?MODULE:loop(Id)
end.
-define(header, header).
-spec headerCount(pid(), integer()) -> integer().
-spec headerExecute(pid(), atom()) -> no_return().
headerCount(Pid, Counter) ->
Pid!{count, Ref = make_ref(), self(), Counter},
receive
{Ref, Result} -> Result
end.
headerExecute(Pid, Cmd) ->
Pid!{execute, Cmd}.
-module(b).
-export([create/0, stop/1]).
-export([loop/0]).
create() ->
spawn(?MODULE, loop, []).
stop(Pid) ->
Pid!{stop}.
loop() ->
receive
{count, Ref, From, Counter} ->
From!{Ref, Counter + 1},
?MODULE:loop();
{execute, Cmd} ->
%% Execute something with the command Cmd %%
?MODULE:loop();
{stop} ->
ok;
_ ->
?MODULE:loop()
end.
-module(c).
-export([create/1, execution/2, stop/1]).
-export([loop/1]).
-include(header).
create(Id) ->
spawn(?MODULE, loop, [Id]).
execution(Pid, Cmd) ->
Pid!{execution, Cmd}.
stop(Pid) ->
Pid!{stop}.
loop(Id) ->
receive
{execution, Cmd} ->
headerExecute(Id, Cmd),
?MODULE:loop(Id);
{stop} ->
ok;
_ ->
?MODULE:loop(Id)
end.
对于可伸缩性,它不是在erl文件中导出这些函数的选项,并且在头文件中导出这些函数会导致错误。
如何丢弃或删除这些警告?
编辑:我将此功能放在标题中,以便可以轻松地将新的erl模块添加到代码中并调整现有的erl模块,而无需触及其他erl模块。
提前致谢。
答案 0 :(得分:1)
在头文件中使用nowarn_unused_function
编译器参数。
-compile({nowarn_unused_function, [headerCount/2, headerExecute/2]})
但它没有任何可扩展性。你错了这个词。