透析器错误调用丢失或未导出的函数 gen_server:call/4
Dialyzer Errors call to missing or unexported function gen_server:call/4
stop_link(UserDefined) ->
gen_server:call({local, UserDefined}, terminate, [], []),
ok
我正在使用 dialyzer 修复 erlang 代码中的警告,我遇到了这个错误,它显示缺少或未导出的函数 gen_server:call/4
。
我无法理解这个罐头有什么问题,请任何人指导我错误是什么我刚开始使用 Erlang,如果你能简要解释一下,我将不胜感激.
这段代码有很多错误。开始了...
调用 start_link
函数的原因是因为它启动了进程和 links to it。您的 stop
函数应该被称为 stop
.
gen_server:call/2,3
的 documentation 显示了此代码的两个问题:
gen_server:call
不需要 {local, Name}
表格。只有在调用 gen_server:start_link
时才需要它(并且只有在您需要为您的进程注册名称时)。要调用本地名称,只需使用 Name
。或者进程ID。
- 没有参数为 4(即 4 个参数)的函数变体。 3-arity 变体需要超时。你可能想要 2-arity 的。
我 怀疑 您正试图在 gen_server:call
中指定一个任意函数(即您想调用 terminate
函数)。这不是它的工作原理。
gen_server:call(NameOrPid, Request)
导致调用 handle_call(Request, From, State)
。参见 the documentation。
在that函数中,可以匹配请求,做相应的事情。像这样:
handle_call(frob, _From, State) ->
% do whatever 'frob' means.
{reply, ok, NewState};
(;
可能是 .
,取决于这是否是最终的 handle_call
子句。
如果你真的想让服务器停止,你应该只做下面的事情:
handle_call(terminate, _From, State) ->
{stop, meh, State}.
将调用 terminate
。
哦,如果您只是刚开始学习 Erlang,您可能不想成为 运行 透析器,直到您获得更多经验。对于初学者来说,这有点……棘手……。虽然它确实发现了这个错误,这很好。
stop_link(UserDefined) ->
gen_server:call({local, UserDefined}, terminate, [], []),
ok
我正在使用 dialyzer 修复 erlang 代码中的警告,我遇到了这个错误,它显示缺少或未导出的函数 gen_server:call/4
。
我无法理解这个罐头有什么问题,请任何人指导我错误是什么我刚开始使用 Erlang,如果你能简要解释一下,我将不胜感激.
这段代码有很多错误。开始了...
调用 start_link
函数的原因是因为它启动了进程和 links to it。您的 stop
函数应该被称为 stop
.
gen_server:call/2,3
的 documentation 显示了此代码的两个问题:
gen_server:call
不需要{local, Name}
表格。只有在调用gen_server:start_link
时才需要它(并且只有在您需要为您的进程注册名称时)。要调用本地名称,只需使用Name
。或者进程ID。- 没有参数为 4(即 4 个参数)的函数变体。 3-arity 变体需要超时。你可能想要 2-arity 的。
我 怀疑 您正试图在 gen_server:call
中指定一个任意函数(即您想调用 terminate
函数)。这不是它的工作原理。
gen_server:call(NameOrPid, Request)
导致调用 handle_call(Request, From, State)
。参见 the documentation。
在that函数中,可以匹配请求,做相应的事情。像这样:
handle_call(frob, _From, State) ->
% do whatever 'frob' means.
{reply, ok, NewState};
(;
可能是 .
,取决于这是否是最终的 handle_call
子句。
如果你真的想让服务器停止,你应该只做下面的事情:
handle_call(terminate, _From, State) ->
{stop, meh, State}.
将调用 terminate
。
哦,如果您只是刚开始学习 Erlang,您可能不想成为 运行 透析器,直到您获得更多经验。对于初学者来说,这有点……棘手……。虽然它确实发现了这个错误,这很好。