Erlang mnesia:write/1如何知道表名?
在Joe Armstrong关于Erlang的书中,有一个将行插入mnesia数据库的示例:Erlang mnesia:write/1如何知道表名?,erlang,mnesia,Erlang,Mnesia,在Joe Armstrong关于Erlang的书中,有一个将行插入mnesia数据库的示例: add_shop_item(Name, Quantity, Cost) -> Row = #shop{item=Name, quantity=Quantity, cost=Cost}, F = fun() -> mnesia:write(Row) end, mnesia:transaction(F). 该行被插入到名为shop的表中,但是如果
add_shop_item(Name, Quantity, Cost) ->
Row = #shop{item=Name, quantity=Quantity, cost=Cost},
F = fun() ->
mnesia:write(Row)
end,
mnesia:transaction(F).
该行被插入到名为
shop
的表中,但是如果像row
这样的Erlang记录实际上只是元组,而mnesia:write/1不使用参数作为表名,那么该行是如何发生的呢?记录是元组,其中第一个元素是命名记录的原子,在本例中是shop
。在mnesia源代码中,您可以看到它如何提取第一个元素用作表名
write(Val) when is_tuple(Val), tuple_size(Val) > 2 ->
Tab = element(1, Val),
write(Tab, Val, write);