抑制 header 文件中的 Erlang“未使用函数”警告
Suppressing Erlang “unused function” warnings in header files
我有一个 header 文件,里面有一些功能。
它旨在实现可扩展性 ;)
在这个 header 文件中,我使用 -spec
作为我的函数。
因为我的 header 文件包含在多个 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 文件中,而将这些函数导出到 header 文件中会导致错误。
如何丢弃或摆脱这些警告?
编辑:我将此功能放在 header 中,以便可以轻松地将新的 erl 模块添加到代码中并调整现有的 erl 模块,而无需触及其他 erl 模块。
提前致谢。
在头文件中使用 nowarn_unused_function
编译器参数。
-compile({nowarn_unused_function, [headerCount/2, headerExecute/2]})
但它没有任何可扩展性。你用错了这个词。
我有一个 header 文件,里面有一些功能。 它旨在实现可扩展性 ;)
在这个 header 文件中,我使用 -spec
作为我的函数。
因为我的 header 文件包含在多个 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 文件中,而将这些函数导出到 header 文件中会导致错误。
如何丢弃或摆脱这些警告?
编辑:我将此功能放在 header 中,以便可以轻松地将新的 erl 模块添加到代码中并调整现有的 erl 模块,而无需触及其他 erl 模块。
提前致谢。
在头文件中使用 nowarn_unused_function
编译器参数。
-compile({nowarn_unused_function, [headerCount/2, headerExecute/2]})
但它没有任何可扩展性。你用错了这个词。