文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

今天的Erlang Thursday我们继续研究queue模块来看看扩展API里的 queue:peek/1

queue:peek/1 接收一个队列为入参,如果这个队列是空的,它返回原子 empty ,否则它返回 {value, Item} 元组,其中 Item 是队列的头部元素。

QueueOne = queue:from_list([1, 2, 3, 4, 5]).
% {[5,4],[1,2,3]}
queue:peek(QueueOne).
% {value,1}
QueueOne.
% {[5,4],[1,2,3]}
EmptyQueue = queue:new().
% {[],[]}
queue:peek(EmptyQueue).
% empty

queue:peek/1 绝对不会修改入参队列,所以我们可以再一次调用上述例子,或者像下面例子一样多次调用,而我们的入参队列不会被修改。

第 1 段(可获 2 积分)
QueueTwo = queue:from_list([a, b, c, d, e, f]).
% {[f,e],[a,b,c,d]}
queue:peek(QueueTwo).
% {value,a}
queue:peek(QueueTwo).
% {value,a}
queue:peek(QueueTwo).
% {value,a}
QueueTwo.
% {[f,e],[a,b,c,d]}

不像上一篇文章里我们看到的 queue:head/1 ,我们可以安全地在入参队列为空的情况下调用 queue:peek/1 函数,而不是获得一个异常。

queue:head(EmptyQueue).
% ** exception error: empty
%      in function  queue:head/1
%         called as queue:head({[],[]})
queue:peek(EmptyQueue).
% empty

Erlang的 queue 模块也包含函数 queue:peek_r/1 ,它返回入参队列的尾部元素。

第 2 段(可获 2 积分)
queue:peek_r(EmptyQueue).
% empty
queue:peek_r(QueueOne).
% {value,5}
queue:peek_r(QueueOne).
% {value,5}
queue:peek_r(QueueOne).
% {value,5}
queue:peek_r(QueueTwo).
% {value,f}
QueueTwo.
% {[f,e],[a,b,c,d]}
QueueOne.
% {[5,4],[1,2,3]}
EmptyQueue.
% {[],[]}
第 3 段(可获 2 积分)

文章评论