Erl 中的记录(Erlang 问题)

Posted

技术标签:

【中文标题】Erl 中的记录(Erlang 问题)【英文标题】:Records in Erl (Erlang question) 【发布时间】:2010-11-26 01:14:44 【问题描述】:

有没有办法直接在erl中使用记录?无论我尝试什么,它总是说它找不到记录。我正在尝试进行记忆交易,如果没有我的记录,我不能走得太远。非常感谢任何帮助 - 谢谢!

【问题讨论】:

【参考方案1】:

是的,使用 help() 并在 shell 中找到这些命令。

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

这些是 shell 中的一个巧妙的 hack,它们允许您在编译模块时加载模块中使用的记录定义。使用 rr 命令从您的模块中加载它。

请记住,这些仅供交互式 shell 使用。

【讨论】:

补充一点:记录并不真正存在......它们只是标记的元组。例如。假设您定义了 -record(state, sessions )。那么当你使用 #state session = N 时,它实际上就是元组 state, N。同样,如果您只键入#state,那么这将是 state, undefined。知道了这一点,您可以轻松地“伪造”记录,例如在 shell 中使用 mnesia 时。祝你好运。【参考方案2】:

你是什么意思?在外壳中,就像克里斯蒂安所写的那样。如果您的意思是在模块中,那么您仍然必须先定义记录才能使用它们。有关如何执行此操作的说明,请参阅在线http://erlang.org/doc/ 的 erlang 文档。它们只是编译时构造,因此它们不存在。

【讨论】:

以上是关于Erl 中的记录(Erlang 问题)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Erlang 中的模式匹配记录会抛出错误

如何在不中止 erl 的情况下中止 Erlang shell (erl) 中的接收语句?

原因:在 erl 控制台 [Erlang] 中运行常见测试时 undef

Erlang:从命令行调用 erl -eval 永远不会退出

Erlang:当你在 erl 中 f() 一个 Pid 时会发生啥?

从 bash 变量为 Erlang erl 传递 -eval 失败