如何在 Elixir 匿名函数中打印结果

How to print result in Elixir anonymous function

我想做的是在记录开始等于<<'*fb'>>的远程节点中获取记录数。这是我的代码,但是,它没有 return 结果。相反,它只是 return 进程 ID #PID<10878.11003.0>。我怎样才能使它成为 return 记录数?

Node.spawn :'abc@abc.com', sum = fn ->
  for n <- :mnesia.dirty_select(:'cz_jid_mapping',[{{:cz_jid_mapping, :'', :'_',:'_',:'_'},[],[:'']}]) do
    io.format((binary_part(n,0,3)==<<"*fb">>))
  end
end

生成的进程并发运行。因此,如果你想向调用进程发送一些东西,你需要使用 messages:

me = self

Node.spawn :'abc@abc.com', sum = fn ->
  result = ...
  send(me, {:result, result})
end

receive do
  {:result, result} -> {:ok, result}
after timeout_in_ms -> {:error, :timeout}
end

然而,这是很多样板文件,在生产中应避免使用 Node.spawn/2,因为如果不同的节点没有完全相同的模块版本,它可能会失败。

最好实现和导出一些在本地节点上完成工作的函数,例如 Db.record_count。然后,您可以使用 :rpc 模块中的服务在其他节点上调用该函数。特别是,:rpc.call 将调用函数并 return 结果:

:rpc.call(:foo@bar, Db, :record_count, [arg1, arg2, ...], timeout_in_ms)