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宏