NewOpts = Opts#server_opts{port=7000}.
这里首先创建一个server_opts Record
NewOpts = Opts#{port=7000}创建了一个Opts的副本,并指定port为7000并绑定到NewOpts
匹配Record和Guard语句
不谈模式匹配就不算Erlang
让我们来看看一个例子:
handle(Opts=#server_opts{port=8000}) ->
% do special port 8080 stuff
handle(Opts=#server_opts{} ->
% default stuff
Guard语句和上面的类似,例如绑定小于1024的端口通常需要root权限,所以我们可以这样做:
handle(Opts) when Opts#server_opts.port <= 1024 ->
% requires root access
handle(Opts=#server_opts{}) ->
% Doesn't require root access
使用Record
在我使用Erlang的有限的时间里,我发现Record主要用在两种场景
首先,Record用来保存状态,特别是在使用gen_server的behaviour时
由于Erlang不能全局保持状态,所以状态必须在方法之前传来传去
然后,Record可以用来保存配置选项,这可以认为是第一点的子集
尽管如此,Record也有一些限制,最明显的是不能在运行时添加和删除field,这和C的struct一样,Record的结构必须预先定义
如果你想在运行时添加和删除field,或者你在运行时才能确定有哪些field,这时你应该使用dict而不是Record










