我目前正在研究"编程Elixir"书,刚发现这个" map"并行实施:
ResponseBeam rBeam = //Retrofit response here.
JsonObject requiredJsonObject = new JsonObject();
requiredJsonObject.put("value", rBeam.getData().getValue());
Log.d(TAG, requiredJsonObject);
对代码的评论说:"注意它如何在接收块中使用defmodule Parallel do
def pmap(collection, fun) do
me = self
collection
|> Enum.map(fn (elem) ->
spawn_link fn -> (send me, { self, fun.(elem) }) end end)
|> Enum.map(fn (pid) ->
receive do { ^pid, result } -> result end
end)
end
end
来依次获得每个PID的结果。如果没有这个,我们会以随机顺序取回结果。"。有人可以澄清一下吗?
答案 0 :(得分:5)
^
被称为pin运算符。它与变量的先前值匹配,而不是将其重新绑定到新值。所以:
receive do
{pid, result} -> result
end
接收{whatever, whatever}
形式的任何消息,并从该元组返回第二个元素。但
receive do
{^pid, result} -> result
end
接收任何元组消息,第一个元素是存储在pid
中的确切值。