1

我在模块中有以下代码:

-module(my_server).

-record(server_opts,
        {port, ip = "127.0.0.1", max_connections = 10}).

Opts1 = #server_opts{port=80}.

当我尝试在 Erlang shell 中编译它时,会出现类似 syntax error before Opts1. 知道上面的代码可能有什么问题。请注意,代码取自以下网站: Record example in Erlang

4

2 回答 2

5

以下行:

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.
于 2012-11-12T08:01:19.020 回答
3

也许,你认为这Opts1是一个全局常量,但是 erlang 中没有全局变量。

您可以使用宏定义来获得类似全局常量的东西(实际上在编译时被替换):

-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]).

PS 使用 shell 中的记录。假设 - 您已经创建了my_server.hrl包含记录定义的文件server_opts。首先,您必须使用 function 加载记录定义,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> 
于 2012-11-12T10:08:13.660 回答