Syntax Erlang给出了记录构造的语法错误

Syntax Erlang给出了记录构造的语法错误,syntax,erlang,record,erlang-shell,Syntax,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之前的语法错误。你知道上面的代码有什么问题吗。请注意,代码取自以下网站: .下一行: Opts1 = #server_o

我在模块中有以下代码:

-module(my_server).

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

Opts1 = #server_opts{port=80}.
当我尝试在Erlang shell中编译它时,会出现如下错误 Opts1之前的语法错误。你知道上面的代码有什么问题吗。请注意,代码取自以下网站: .

下一行:

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.
以下一行:

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.

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

您可以使用全局常量(实际上在编译时被替换):

附言。 使用shell中的记录。假设-您已经创建了文件
my\u server.hrl
,其中包含记录
服务器选项的定义。首先,您必须使用函数
rr(“文件名\u和记录定义”)
加载记录定义,然后准备在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> 

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

您可以使用全局常量(实际上在编译时被替换):

附言。 使用shell中的记录。假设-您已经创建了文件
my\u server.hrl
,其中包含记录
服务器选项的定义。首先,您必须使用函数
rr(“文件名\u和记录定义”)
加载记录定义,然后准备在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> 

嗨,Roberto,这是因为避免了副作用吗?这是因为模块在Erlang中的工作方式。模块包含一系列属性(模块名称、导出函数列表、记录定义等)和函数声明。要执行一段Erlang代码,您需要一个入口点(函数声明)。谢谢!:)我想知道为什么在这个例子中没有提到这一点。这就是为什么我对记录用法感到困惑的原因。嗨,罗伯托,这是因为避免了副作用吗?这是因为模块在Erlang中是如何工作的。模块包含一系列属性(模块名称、导出函数列表、记录定义等)和函数声明。要执行一段Erlang代码,您需要一个入口点(函数声明)。谢谢!:)我想知道为什么在这个例子中没有提到这一点。这就是为什么我对记录用法感到困惑的原因。所以一般来说,我需要一个函数来使用记录;是吗?是的,您总是需要在函数中包装代码的执行(erlang shell会话除外,在该会话中,您可以创建变量并为它们赋值,而无需将它们包装到函数中-请查看我的答案的编辑)。我想补充一点,在shell中,您还可以使用命令rd:e.g.5>rd(person,{name,姓氏})定义记录。顺便说一下,正如上面所说的,在Erlang中,变量必须在一个函数内。如果你不考虑Erlang宏,那么一般来说,我总是需要一个函数来利用这些记录;是吗?是的,您总是需要在函数中包装代码的执行(erlang shell会话除外,在该会话中,您可以创建变量并为它们赋值,而无需将它们包装到函数中-请查看我的答案的编辑)。我想补充一点,在shell中,您还可以使用命令rd:e.g.5>rd(person,{name,姓氏})定义记录。顺便说一下,正如上面所说的,在Erlang中,变量必须在函数内,如果你不考虑Erlang宏