2013-03-07 3 views
0

Следующий код компилируется несколько с предупреждением:Erlang: передача записи в функцию?

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 

Heres Кодекса :

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

ответ

4

Причина ошибки record pass undefined заключается в том, что вам необходимо загрузить запись в оболочке командой rr, чтобы иметь возможность использовать ее напрямую. См. this question для получения дополнительной информации.

Когда я делаю это, я получаю проблемы, что компилятор предупреждает о:

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

(Вы также пропускание записи в списке, в то время как функция ожидает только запись, таким образом, ошибка в строке 3.)

+0

О, ну ... это то, что 'rr().' Вещь, о которой я забыл. Благодаря! – pandoragami

1

Как говорит предупреждающее сообщение, проблема на линии 8:

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

Вы передаете список из трех аргументов в строку формата: ARG1, NAME, TO_GO, но в строке формата используются только два (всего два ~ p). Это не имеет никакого отношения к записям.

+0

Я установил его в этот 'io: format (" ~ p ~ p ~ p ~ n ", [ARG1, NAME, TO_GO]). 'но я все еще получаю сообщение об ошибке? 'Passing_records: record_passing ([# передача {арг1 = 2, имя = "х", to_go = 5}]). * 1: record pass undefined' – pandoragami

Смежные вопросы