问题
I want to export DATA fom table mnesia to the txt file
I try with this code :
exporttxt()->
F = fun(T) -> mensia:foldl(fun(X,Acc) -> [X|Acc] end, [],T) end,
{atomic,L} = mnesia:transaction(F(user)),
file:write_file("test.txt",[io_lib:format("~p\t~p\t~p~n",[F1,F2,F3]) ||
#user{id = F1,adress = F2,birthday = F3} <- L]).
but when I test this function I have this error :
Erlang R13B03 (erts-5.7.4) [source] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.4 (abort with ^G)
1> model:exporttxt().
** exception error: undefined function mensia:foldl/3
in function model:exporttxt/0
2>
as you see I work with erlang version 13
I try now with this code :
exporttxt()->
F = fun(T) -> mnesia:foldl(fun(X,Acc) -> [X|Acc] end, [],T) end,
{atomic,L} = mnesia:transaction(F(user)),
file:write_file("test.txt",[io_lib:format("~p\t~p\t~p~n",[F1,F2,F3]) ||
#user{id = F1,adress = F2,birthday = F3} <- L]).
but I have this error :
** exception exit: {aborted,no_transaction}
in function mnesia:abort/1
in call from model:exporttxt/0
I try also with :
exporttxt()->
F = fun(T) -> mnesia:foldl(fun(X,Acc) -> [X|Acc] end, [],T) end,
{atomic,L} = mnesia:transaction(F),
file:write_file("test.txt",[io_lib:format("~p\t~p\t~p~n",[F1,F2,F3]) ||
#user{id = F1,adress = F2,birthday = F3} <- L]).
but I have this error :
** exception error: no match of right hand side value
{aborted,{{badarity,{#Fun<model.208.16694406>,[]}},
[{mnesia_tm,apply_fun,3},
{mnesia_tm,execute_transaction,5},
{model,exporttxt,0},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_exprs,6},
{shell,eval_loop,3}]}}
in function model:exporttxt/0
回答1:
mnesia:transaction(F(user))
that is wrong, take a minute and look at it. mnesia:transaction/1 expect a function, you aren't passing it a function, you pass whatever the result of F(user) is.. (remember erlang uses strict evaluation, so it evaluates F(user) before mnesia:transaction/1).
In your case that call to F(user) fails because it was expected to run inside a transaction.
回答2:
It is not the problem with the Erlang version. It is the problem with the statement mensia:foldl
spelling is wrong. It should be
mnesia:foldl
来源:https://stackoverflow.com/questions/15344434/call-an-undefined-function-in-erlang