2016-03-16 52 views
0

此问题与the previous one有关。 ,我从the official repo of the book 克隆代码当我运行 benchmarker:start(slidingwindow5).,我得到以下错误:Erlang基准测试人员在阅读文件时遇到问题

4> benchmarker:start(slidingwindow50). true Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none

Specie_Id:6.858114617542796e-10 Morphology:forex_trader

******** Population monitor started with parameters:{state,benchmark,test,[], [],undefined,undefined, undefined,[],0,0,0,0,0, undefined,undefined, undefined,undefined, undefined,undefined,0.5, 10,10,mathema,inf,10000, inf,<0.274.0>,false} Initial Tot Evaluations:0

Started Started Started Started Started Started Started

5> =ERROR REPORT==== 16-Mar-2016::14:11:34 === Error in process <0.287.0> with exit value: {badarg,[{ets,last,['EURUSD15'],[]},{fx,init_state,5,[{file,"fx.erl"},{line,375}]},{fx,sim,3,[{file,"fx.erl"},{line,284}]}]}

=ERROR REPORT==== 16-Mar-2016::14:11:34 === Error in process <0.288.0> with exit value: {badarg,[{ets,last,['EURUSD15'],[]},{fx,init_state,5,[{file,"fx.erl"},{line,375}]},{fx,sim,3,[{file,"fx.erl"},{line,284}]}]}Started Started Started

据了解,该benchmarker无法找到并使用一个表。为什么会发生这种情况,我该如何解决这个问题?

更新:重命名EURUSD15导致运行时polis:start().错误:

Mnesia([email protected]): Data may be missing.

badarg错误STIL发生和报道。

更新:挖掘到的源代码,特别是进入fx.erl,已经使我相信,由于某种原因.txt文件名为EURUSD15不能正常从磁盘中读取,因此它不会转换成表格,并且可以”不能被ets和其他代码使用。

fx.erl中的文件读取有什么问题,以及如何纠正?

回答

1

ets:last期望表名作为唯一的参数。然而,在你的代码中,它被称为'EURUSD15'。这是表名吗?表格是否已创建?请记住,创建表时创建该表的进程拥有它。如果该进程死亡,则该表被删除。您需要根据您的错误调用堆栈来调试代码:

function fx:init_state/5 in file "fx.erl" line 375 
called from 
function fx:sim/3 in file "fx.erl" line 284 
+0

是的,我知道问题出在表上。有一个名为'fx_tables'的文件夹,它包含EURUSD,EURUSD.csv,EURUSD.txt和其他文件。 据我所知,该表在过程开始之前存在,并且在它死亡时不会被删除。 – Chiffa

+0

看看编辑,找出整个项目的文件夹结构。 – Chiffa

+0

该表是表示表名或表ID的原子,请参阅:http://erlang.org/doc/man/ets.html#type-tab该表必须已使用'ets:new/2创建'在它可以用'ets:last'访问之前,请参阅:http://erlang.org/doc/man/ets.html#new-2表不在文件中,它在内存中,所以我我不知道你的意思是一个名为'fx_tables'的文件夹。在Erlang shell中运行'ets:i()。',它将打印出在ETS中创建的所有表。您的餐桌'EURUSD15'必须在该列表中。 – Amiramix