Function Erlang:将记录传递到函数中?

Function Erlang:将记录传递到函数中?,function,erlang,record,argument-passing,Function,Erlang,Record,Argument Passing,以下代码在编译时确实带有警告: 23> c(passing_records). passing_records.erl:8: Warning: wrong number of arguments in format call {ok,passing_records} 但是当我尝试运行它时,我在尝试将变量传递给名为pass的记录时遇到了这个错误: 22> passing_records:rec

以下代码在编译时确实带有警告:

23> c(passing_records).                                              
passing_records.erl:8: Warning: wrong number of arguments in format call
{ok,passing_records}
但是当我尝试运行它时,我在尝试将变量传递给名为
pass
的记录时遇到了这个错误:

22> passing_records:record_passing([#pass{arg1=2,name="x",to_go=5}]).
* 1: record pass undefined
代码如下:

-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]).    

正如警告信息所说,问题出在第8行:

 io:format("~p ~p~n", [ARG1,NAME,TO_GO])

您正在向格式字符串传递一个包含三个参数的列表:ARG1、NAME、to_GO,但格式字符串仅使用其中两个参数(只有两个~p)。它与记录无关。

正如警告消息所说,问题出在第8行:

 io:format("~p ~p~n", [ARG1,NAME,TO_GO])

您正在向格式字符串传递一个包含三个参数的列表:ARG1、NAME、to_GO,但格式字符串仅使用其中两个参数(只有两个~p)。它与记录无关。

记录传递未定义错误的原因是您需要使用
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])
Eshell V5.9(使用^G中止)
1> c(“/tmp/passing_records”,[{outdir,“/tmp/”}])。
c(“/tmp/passing_records”,[{outdir,“/tmp/”}])。
/tmp/passing_records.erl:8:警告:格式调用中的参数数目错误
{好的,传递_记录}
2> rr(通过_记录)。
[通过]
3> 传递_记录:记录_传递([#传递{arg1=2,name=“x”,to_go=5}])。
**异常错误:没有匹配的函数子句
通过记录:记录通过([#通过{
arg1=2,name=“x”,
to_go=5}])(/tmp/passing_records.erl,第7行)
4> 传递记录:记录传递(#传递{arg1=2,name=“x”,to_go=5})。
**异常错误:参数错误
在功能io中:格式/3
称为io:format(,“~p~p~n”,[2,“x”,5])

(您也在列表中传递记录,而函数只需要一条记录;因此第3行出现错误。)

出现
记录传递未定义
错误的原因是您需要使用
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])
Eshell V5.9(使用^G中止)
1> c(“/tmp/passing_records”,[{outdir,“/tmp/”}])。
c(“/tmp/passing_records”,[{outdir,“/tmp/”}])。
/tmp/passing_records.erl:8:警告:格式调用中的参数数目错误
{好的,传递_记录}
2> rr(通过_记录)。
[通过]
3> 传递_记录:记录_传递([#传递{arg1=2,name=“x”,to_go=5}])。
**异常错误:没有匹配的函数子句
通过记录:记录通过([#通过{
arg1=2,name=“x”,
to_go=5}])(/tmp/passing_records.erl,第7行)
4> 传递记录:记录传递(#传递{arg1=2,name=“x”,to_go=5})。
**异常错误:参数错误
在功能io中:格式/3
称为io:format(,“~p~p~n”,[2,“x”,5])

(您也在列表中传递记录,而函数只需要一条记录;因此第3行出现错误。)

我将其修复为
io:format(“~p~p~p~n”,[ARG1,NAME,to_GO])但运行它时仍然会出错<代码>传递记录:记录传递([#传递{arg1=2,name=“x”,to#go=5}])*1:记录传递未定义
I将其固定为
io:format(“~p~p~p~n”,[ARG1,NAME,to_GO])但运行它时仍然会出错<代码>传递记录:记录传递([#传递{arg1=2,name=“x”,to#go=5}])*1:记录过程未定义