今天的Erlang Thursday我们继续挖掘Erlang的queue模块的Okazaki API,这次来看看queue:head/1.
queue:head/1 入参是一个队列,它的输出是这个队列的第一个元素。
|
|
上述例子显示,queue:head/1 函数没有修改原来的队列,而仅是返回它的第一个元素。
因为 queue:head/1 仅仅是返回队列头部能找到的值,而且不是一个标签元组,如果我们尝试从一个空的队列获取它的头部元素则会抛出一个错误。
|
|
为了安全起见,让我们不在一个空队列上运行该函数而造成抛出异常,queue模块也定义了一个函数 queue:is_empty/1 ,你可以用它来检查一个队列是否为空。
|
|
像 queue:cons/2 和Okazaki API的其它函数一样,模块里也有一个函数queue:dash (head单词倒过来写),它从队列获取最后一个元素,它也是 queue:last/1 的别名函数。
|
|
如果你调用 queue:dash/1 和 queue:last/1 的时候用空队列做入参也会引起错误。
|
|
如果我们仔细看 queue:dash/1 和 queue:last/1 引起的错误,我们看到这个错误来自扩展API的 queue:get_r/1 。如果我们仔细看 queue:get_r/1 的执行情况,他看起来像 queue:tail/1 和 queue:dash/1 ,而这两个函数真的仅是 queue:get_r/1 别名函数。
|
|
原文链接: https://www.proctor-it.com/erlang-thursday-queue-head-1/