调用erlang中未定义的函数



我想将数据从表mnesia导出到txt文件

我尝试使用这个代码:

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("~pt~pt~p~n",[F1,F2,F3]) || 
                 #user{id = F1,adress = F2,birthday = F3} <- L]).

但是当我测试这个功能时,我有一个错误:

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> 

正如你所看到的,我使用erlang版本13

我现在尝试使用此代码:

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("~pt~pt~p~n",[F1,F2,F3]) || 
                 #user{id = F1,adress = F2,birthday = F3} <- L]).

但是我有一个错误:

** exception exit: {aborted,no_transaction}
     in function  mnesia:abort/1
     in call from model:exporttxt/0

我也尝试使用:

 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("~pt~pt~p~n",[F1,F2,F3]) || 
                     #user{id = F1,adress = F2,birthday = F3} <- L]).

但是我有一个错误:

** 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

这不是Erlang版本的问题。这是语句mensia:foldl拼写错误的问题。应该是mnesia:foldl

mnesia:transaction(F(user))

这是错误的,花一分钟时间看看。mnesia:transaction/1需要一个函数,而不是传递函数,你传递F(user(的结果是什么。(记住erlang使用严格的评估,所以它在mnesia:transaction/1之前评估F(user((。

在您的情况下,对F(用户(的调用失败,因为它应该在事务中运行。