pan*_*ami 1 erlang function record argument-passing
以下代码在编译时会发出警告:
23> c(passing_records).
passing_records.erl:8: Warning: wrong number of arguments in format call
{ok,passing_records}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行它时,尝试将变量传递给名为 的记录时出现此错误pass:
22> passing_records:record_passing([#pass{arg1=2,name="x",to_go=5}]).
* 1: record pass undefined
Run Code Online (Sandbox Code Playgroud)
代码如下:
-module(passing_records).
-export([record_passing/1]).
-record(pass, {arg1 ,
name="",
to_go=0}).
record_passing( #pass{arg1 = ARG1, name = NAME, to_go = TO_GO}) ->
io:format("~p ~p~n", [ARG1,NAME,TO_GO]).
Run Code Online (Sandbox Code Playgroud)
record pass undefined报错的原因是需要用rr命令在shell中加载记录才能直接使用。有关更多信息,请参阅此问题。
当我这样做时,我遇到了编译器警告的问题:
Eshell V5.9 (abort with ^G)
1> c("/tmp/passing_records", [{outdir, "/tmp/"}]).
c("/tmp/passing_records", [{outdir, "/tmp/"}]).
/tmp/passing_records.erl:8: Warning: wrong number of arguments in format call
{ok,passing_records}
2> rr(passing_records).
[pass]
3> passing_records:record_passing([#pass{arg1=2,name="x",to_go=5}]).
** exception error: no function clause matching
passing_records:record_passing([#pass{
arg1 = 2,name = "x",
to_go = 5}]) (/tmp/passing_records.erl, line 7)
4> passing_records:record_passing(#pass{arg1=2,name="x",to_go=5}).
** exception error: bad argument
in function io:format/3
called as io:format(<0.24.0>,"~p ~p~n",[2,"x",5])
Run Code Online (Sandbox Code Playgroud)
(您还在列表中传递记录,而该函数只需要一条记录;因此第 3 行出现错误。)