在elixir中有一段代码,它检查节点是否是活动的,并在此基础上进行一些操作。如何在erlang中实现相同的功能?
def make_distributed([head | tail],l) do
unless Node.alive?() do
try do
{ip_tuple,_,_} = head
current_ip = to_string(:inet_parse.ntoa(ip_tuple))
if current_ip === "127.0.0.1" do
if l > 1 do
make_distributed(tail,l-1)
else
IO.puts "Could not make current node distributed."
end
else
server_node_name = String.to_atom("client@" <> current_ip)
Node.start(server_node_name)
Node.set_cookie(server_node_name,:monster)
Node.connect(String.to_atom("server@" <> current_ip))
end
rescue
_ -> if l > 1, do: make_distributed(tail,l-1), else: IO.puts "Could not make current node distributed."
end
end
end
如果...else在Erlang中的工作方式不同,我尝试将其更改为该格式,但在酏剂代码中存在的一些功能在Erlang中很难显示。
1条答案
按热度按时间j5fpnvbx1#
首先,直接翻译...
但这是一些非常丑陋的代码。让我们更有效地使用模式匹配...
但是...我们不需要在每个递归步骤都检查节点的活跃度,对吗?
最后,让我们将
L > 1
检查移到它自己的子句中,就像常规递归函数一样...这就是我用Erlang编写的代码,可以达到与Elixir代码相同的目的。