Erlang-如何在没有记录的情况下使用 Mnesia

Posted

技术标签:

【中文标题】Erlang-如何在没有记录的情况下使用 Mnesia【英文标题】:Erlang- How to use Mnesia without records 【发布时间】:2015-05-24 20:29:25 【问题描述】:

据我目前了解,Erlang 记录是元组:

#myRecorda="a", b="b" = myRecord, "a", "b"

考虑到这一点,以下工作:

mnesia:create_table( attributes, [name, age] )
mnesia:activity(transaction, fun() -> mnesia:write(users,  user, "Charlie", "Unknow" , write)

但是我将如何检索此条目? 大多数在线 Mnesia 示例使用记录来存储和访问表行。

【问题讨论】:

我猜想使用mensia:read/2 应该可以。您在示例中看到的问题是什么?你试过什么? 我已经尝试过 mnesia:read/2,它返回一个空列表。 很奇怪,因为当我调用observer:start from shell and peak into table时,我的测试记录就在那里。 mnesia:select/2 似乎也不起作用。顺便说一句,我在 Windows 上。那会有什么不同吗? 【参考方案1】:

@Zeiss - 你是对的。 mnesia:read/2 作品。问题在于我试图使用:

:mnesia.transaction(fn -> :mnesia.read(Users, b) end)

代替:

:mnesia.transaction(fn -> :mnesia.read(Users, "b") end)

无疑是一个基本错误。 希望答案对遇到相同(或类似...)问题的其他人有所帮助。

【讨论】:

很高兴你找到了这个。 :)

以上是关于Erlang-如何在没有记录的情况下使用 Mnesia的主要内容,如果未能解决你的问题,请参考以下文章

在没有 epmd 的情况下启动 erlang VM

如何在二郎案件中的不同案件情况之间进行沟通

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

二进制字符串erlang的第一个字

在这种情况下我应该使用哪种 Erlang 行为,即 gen_server 或 gen_fsm

Erlang 命令行