Erlang队列问题
我正在使用队列api,并遇到错误,它会导致我的程序崩溃。
首先我从字典中获取队列,并在打印输出中返回该队列
获取的队列是[{[],[]}]
这是正常的吗? 队列是否正确创建?
然后,无论我尝试添加队列还是获取其长度,我都会遇到一个错误badargs。
TorrentDownloadQueue = dict:fetch(torrentDownloadQueue, State),
io:format("The fetched queue is ~p~n", [dict:fetch(torrentDownloadQueue, State)]),
% Add the item to the front of the queue (main torrent upload queue)
TorrentDownloadQueue2 = queue:in_r(Time, TorrentDownloadQueue),
% Get the lenght of the downloadQueue
TorrentDownloadQueueLength = queue:len(TorrentDownloadQueue2),
当我尝试插入值10时,错误是
**终止原因== {{badarg,[{queue,in_r,[10,[{[],[]}]},{ph_speed_calculator,handle_cast,2},{gen_server,handle_msg,5},{函数队列中的badarg:in_r / 2在调用时调用ph_speed_calculator:in_r(10,[{[],[]}]中的队列:in_r / 2:handle_cast / 2 gen_server:从proc_lib调用handle_msg / 5:init_p_do_apply / 3 13>
这是in_r的错误,但是我也为len调用得到了一个badargs错误。
我称呼这些的方式有什么问题,或者是初始队列不正确? 我按如下所示创建队列并将其添加到字典中
TorrentDownloadQueue = queue:new(),
TorrentUploadQueue = queue:new(),
D4 = dict:store(torrentDownloadQueue, [TorrentDownloadQueue], D3),
D5 = dict:store(torrentUploadQueue, [TorrentUploadQueue], D4),
我不知道我做错了什么。
你有什么( [{[],[]}]
)是列表中的一个队列。 标准队列看起来像{list(), list()}
。 显然,正因为如此,随后每次对队列的调用都会失败。
我的猜测是你要么排队错,要么以错误的方式提取。
首先,你得到的是一个“badarg”错误。 从Erlang队列的文档中读取:
如果参数的类型是错误的,所有函数都会失败并带有原因badarg,例如队列参数不是队列,索引不是整数,列表参数不是列表。 不正确的列表会导致内部崩溃。 超出范围的索引也会导致故障,原因是badarg。
在你的情况下,你传递给队列:in_r不是队列,而是包含队列的列表。
当您执行以下操作时,您正在将包含队列的列表添加到字典中:
D4 = dict:store(torrentDownloadQueue, [TorrentDownloadQueue], D3),
D5 = dict:store(torrentUploadQueue, [TorrentUploadQueue], D4),
相反,你应该这样做:
D4 = dict:store(torrentDownloadQueue, TorrentDownloadQueue, D3),
D5 = dict:store(torrentUploadQueue, TorrentUploadQueue, D4),
链接地址: http://www.djcxy.com/p/38181.html
下一篇: What's the best way to do something periodically in Erlang?