我在模块中有以下代码:
-module(my_server).
-record(server_opts,
{port,
ip="127.0.0.1",
max_connections=10}).
Opts1 = #server_opts{port=80}.
当我尝试在Erlang shell中编译它时会出现类似的错误 Opts1之前的语法错误。 知道上面的代码可能有什么问题。 请注意,代码来自以下网站: Record example in Erlang
答案 0 :(得分:4)
以下一行:
Opts1 = #server_opts{port=80}.
应包含在函数体中:
foo() ->
Opts1 = #server_opts{port=80},
...
请记住导出该功能,以便您可以从模块外部调用它:
-export([test_records/0]).
完整的例子如下:
-module(my_server).
-export([test_records/0]).
-record(server_opts, {port,
ip = "127.0.0.1",
max_connections = 10}).
test_records() ->
Opts1 = #server_opts{port=80},
Opts1#server_opts.port.
答案 1 :(得分:3)
也许,你认为Opts1
是一个全局常量,但erlang中没有全局变量。
您可以使用macro definitions来获取类似全局常量(在编译时实际被替换):
-module(my_server).
-record(server_opts,
{port,
ip="127.0.0.1",
max_connections=10}).
%% macro definition:
-define(Opts1, #server_opts{port=80}).
%% and use it anywhere in your code:
my_func() ->
io:format("~p~n",[?Opts1]).
P.S。
使用shell中的记录。假设 - 您创建了包含记录my_server.hrl
定义的文件server_opts
。首先,您需要使用函数rr("name_of_file_with_record_definition")
加载记录定义,之后您就可以使用shell中的记录了:
1> rr("my_record.hrl").
[server_opts]
2>
2> Opts1 = #server_opts{port=80}.
#server_opts{port = 80,ip = "127.0.0.1",
max_connections = 10}
3>
3> Opts1.
#server_opts{port = 80,ip = "127.0.0.1",
max_connections = 10}
4>