“#”在Erlang中是什么意思?
What does " # " mean in Erlang?
“#”在 Erlang 语法中是什么意思?
例如:
Request#radius_packet.attrs
Request
是记录绑定的变量。
#
表示变量是一条记录
radius_packet
是记录的名称。
attrs
是您从记录中访问的字段。
散列标记在 Erlang 中有两种含义:对记录的引用,或对地图的引用。
上面的具体情况是引用变量名称为 Request
、类型为 radius_packet
并访问字段 attrs
的记录。此语法模仿访问其他语言中结构或对象上的字段(但要小心,因为它 与 不同)。它直接等效于引用该字段作为变量赋值的一部分,然后使用该变量。下面三个版本的 some_function/1
在传递给 do_something/1
:
的内容上都是等价的
some_function(Request = #radius_packet{attrs = Attrs}) ->
do_something(Attrs),
% Other things where we need Request also...
some_function(#radius_packet{attrs = Attrs}) ->
do_something(Attrs),
% Other things where we don't need Record...
some_function(Request) ->
do_something(Request#radius_packet.attrs),
% etc...
记录是一种元语法;它们是预处理器的便利,实际上在编译之前被翻译成元组(这就是记录如此之快的原因)。因此,给定 #radius_packet{}
的以下定义,some_function
的以下版本与上面的版本完全相同:
-record #radius_packet{serial, headers, attrs}.
some_function({radius_packet, _, _, Attrs}) ->
do_something(Attrs),
% Other things where we don't need Record...
上面的版本只是简单地忽略了记录语法,转而写出将由预处理器创建的底层元组。
您将看到散列的另一个地方是在地图中。使用散列的 Map 语法看起来类似于记录语法,但在散列和开头的 curley 括号之间没有任何类型名称:
AMap#{}
ARecord#record_type{}
“#”在 Erlang 语法中是什么意思?
例如:
Request#radius_packet.attrs
Request
是记录绑定的变量。
#
表示变量是一条记录
radius_packet
是记录的名称。
attrs
是您从记录中访问的字段。
散列标记在 Erlang 中有两种含义:对记录的引用,或对地图的引用。
上面的具体情况是引用变量名称为 Request
、类型为 radius_packet
并访问字段 attrs
的记录。此语法模仿访问其他语言中结构或对象上的字段(但要小心,因为它 与 不同)。它直接等效于引用该字段作为变量赋值的一部分,然后使用该变量。下面三个版本的 some_function/1
在传递给 do_something/1
:
some_function(Request = #radius_packet{attrs = Attrs}) ->
do_something(Attrs),
% Other things where we need Request also...
some_function(#radius_packet{attrs = Attrs}) ->
do_something(Attrs),
% Other things where we don't need Record...
some_function(Request) ->
do_something(Request#radius_packet.attrs),
% etc...
记录是一种元语法;它们是预处理器的便利,实际上在编译之前被翻译成元组(这就是记录如此之快的原因)。因此,给定 #radius_packet{}
的以下定义,some_function
的以下版本与上面的版本完全相同:
-record #radius_packet{serial, headers, attrs}.
some_function({radius_packet, _, _, Attrs}) ->
do_something(Attrs),
% Other things where we don't need Record...
上面的版本只是简单地忽略了记录语法,转而写出将由预处理器创建的底层元组。
您将看到散列的另一个地方是在地图中。使用散列的 Map 语法看起来类似于记录语法,但在散列和开头的 curley 括号之间没有任何类型名称:
AMap#{}
ARecord#record_type{}