2009-09-06 4 views
5

Есть ли способ использовать записи непосредственно в erl? Независимо от того, что я пытаюсь, он всегда говорит, что он не может найти запись. Я пытаюсь делать транзакции mnesia, и я не могу зайти слишком далеко без моих записей. Любая помощь очень ценится - спасибо!Записи в Erl (вопрос Erlang)

ответ

13

Да, используйте help() и найдите эти команды в оболочке.

rd(R,D) -- define a record 
rf()  -- remove all record information 
rf(R)  -- remove record information about R 
rl()  -- display all record information 
rl(R)  -- display record information about R 
rp(Term) -- display Term using the shell's record information 
rr(File) -- read record information from File (wildcards allowed) 
rr(F,R) -- read selected record information from file(s) 
rr(F,R,O) -- read selected record information with options 

Это умный хак в оболочке, они позволяют загружать записи определений, используемых в модулях, когда они были собраны. Используйте команду rr, чтобы загрузить ее из своего модуля.

Помните, что они доступны только для интерактивной оболочки.

+1

Небольшое примечание для добавления: Записи на самом деле не существуют ... они просто помечены кортежами. Например. скажем, что вы определяете -record (state, {sessions}). то когда вы когда-либо используете #state {session = N}, на самом деле это будет кортеж {state, N}. Аналогично, если вы только набираете #state {}, то это будет {state, undefined}. Зная это, вы можете легко «подделывать» записи, например, при работе с mnesia в оболочке. Удачи. –

3

Как вы относитесь? В скорлупе это так, как писал христианин. Если вы имеете в виду в модуле, вам все равно придется определять записи, прежде чем вы сможете их использовать. См. Документацию erlang, онлайн по адресу http://erlang.org/doc/, для описания того, как это сделать. Это всего лишь компиляция времени, поэтому они не существуют как таковые.