【发布时间】:2015-01-11 07:04:00
【问题描述】:
在 Erlang 中用 end 和 ok 结束函数有什么区别?我一直在尝试理解以下代码中的含义:
-module(esOne).
-export([start/1, func/1]).
start(Par) ->
io:format("Client: I am ~p, spawned by the server: ~p~n",[self(),Par]),
spawn(esOne, func, [self()]),
Par ! {onPid, self()},
serverEsOne ! {onName, self()},
receiveMessage(),
ok.
receiveMessage() ->
receive
{reply, N} ->
io:format("Client: I received a message: ~p~n",[N])
after
5000->
io:format("Client: I received no message, i quit~n",[])
end.
func(Parent)->
io:format("Child: I am ~p, spawned from ~p~n",[self(),Parent]).
此代码与另一个充当服务器的 .erl 文件结合使用。我设法通过分析给定的服务器文件并复制它的行为来编写这个。首先,我认为 ok 用于结束每个函数,但事实并非如此,因为我不能用 ok 结束 receiveMessage()。然后我想我可以用 end 结束每个函数,但是如果我用 end 替换 ok,start(Par) 会出错。不仅如此,在服务器文件中,我看到 ok 和 end 在函数中用于结束循环。它们的使用方式在我看来是一样的,但它们显然实现了一个单独的功能,因为一个不能被另一个替代。一些澄清将不胜感激。
【问题讨论】:
-
我在您的示例代码中调整了一些内容以提高可读性。使用
io:format时,您希望使用“~n”而不是“\n”。此外,我们通常使用下划线表示原子like_this_one,使用驼峰式表示VariableNames。这极大地提高了可读性和视觉识别——以至于源代码突出显示在 Erlang 中通常不那么重要。
标签: erlang