Erlang记录错误

时间:2012-11-12 07:56:39

标签: erlang record erlang-shell

我在模块中有以下代码:

-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

2 个答案:

答案 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>