Erlang R19中的gen_服务器实现
我正在从复制gen_服务器实现代码,并创建一个名为Erlang R19中的gen_服务器实现,erlang,Erlang,我正在从复制gen_服务器实现代码,并创建一个名为kitty_gen_服务器.erl的文件。然后在erlang shell中运行以下命令: $ erl Erlang/OTP 19 [erts-8.0.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] Eshell V8.0.2 (abort with ^G) 1> c(kitty_gen_server). {ok,k
kitty_gen_服务器.erl
的文件。然后在erlang shell中运行以下命令:
$ erl
Erlang/OTP 19 [erts-8.0.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Eshell V8.0.2 (abort with ^G)
1> c(kitty_gen_server).
{ok,kitty_gen_server}
2> P = kitty_gen_server:start_link().
{ok,<0.64.0>}
3> kitty_gen_server:close_shop(P).
** exception exit: {{function_clause,
[{gen,do_for_proc,
[{ok,<0.64.0>},#Fun<gen.0.62797829>],
[{file,"gen.erl"},{line,253}]},
{gen_server,call,2,[{file,"gen_server.erl"},{line,200}]},
{erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,674}]},
{shell,exprs,7,[{file,"shell.erl"},{line,686}]},
{shell,eval_exprs,7,[{file,"shell.erl"},{line,641}]},
{shell,eval_loop,3,[{file,"shell.erl"},{line,626}]}]},
{gen_server,call,[{ok,<0.64.0>},terminate]}}
in function gen_server:call/2 (gen_server.erl, line 204)
4>
kitty\u gen\u server:start\u link/0
在成功时返回一个元组{ok,Pid}
,您将其直接存储在p
中,因此您的下一个调用将{ok,Pid}
传递到kitty\u gen\u server:close\u shop/1
。您需要使用模式匹配将Pid仅存储在P
中:
1> c(kitty_gen_server).
{ok,kitty_gen_server}
2> {ok, P} = kitty_gen_server:start_link().
{ok,<0.64.0>}
3> kitty_gen_server:close_shop(P).
ok
1>c(kitty\u gen\u服务器)。
{好的,kitty_gen_server}
2> {ok,P}=kitty\u gen\u服务器:start\u link()。
{好的,}
3> kitty_gen_服务器:关闭商店(P)。
好啊
kitty\u genu\u server:start\u link/0
在成功时返回一个元组{ok,Pid}
,您直接将其存储在p
中,因此您的下一个调用将{ok,Pid}
传递到kitty\u genu\u服务器:关闭商店/1
。您需要使用模式匹配将Pid仅存储在P
中:
1> c(kitty_gen_server).
{ok,kitty_gen_server}
2> {ok, P} = kitty_gen_server:start_link().
{ok,<0.64.0>}
3> kitty_gen_server:close_shop(P).
ok
1>c(kitty\u gen\u服务器)。
{好的,kitty_gen_server}
2> {ok,P}=kitty\u gen\u服务器:start\u link()。
{好的,}
3> kitty_gen_服务器:关闭商店(P)。
好啊