我正在迭代来自接听电话的列表。
{ok, Pid} = riakc_pb_socket:start_link("server", 8087).
riakc_pb_socket:ping(Pid).
riakc_pb_socket:stream_list_keys(Pid, <<"test">>).
%% while receive, repeat this:
receive Msg1 -> Msg1 end.
{_, {_, List}} = Msg1.
lists:map(fun(K) -> riakc_pb_socket:delete(Pid, <<"test">>, K) end, List).
我想知道我是否可以编写一个简单的循环,直到接收返回任何内容。我还重新学习了Erlang shell不允许你定义函数,所以我正在研究非shell版本。
答案 0 :(得分:2)
要获得某种while
循环,您需要使用递归,因为单独的接收不是循环累积消息。
receive
然后循环收件箱。也就是说,它尝试获取与提供的模式相对应的第一条消息(此处为Msg1
)。
所以你必须做这样的事情
gather (0, Acc) ->
lists:reverse(Acc); && Just Acc if you don't care about the order.
gather (N, Acc) ->
receive
Msg1 -> gather(N -1, [Msg1|Acc])
end.
gather(10). %% If you are waiting for 10 messages.