如何在 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)
我想做的是在记录开始等于<<'*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)