是否有一种简单的方法可以从Erlang记录定义中获取默认值?假设我有这样的事情:
-record(specialfield, {
raw = <<"default">> :: string()
}).
我想通过某种方式检索raw
字段的默认值。这样的事情会非常简单:
#specialfield.raw % => <<"default">>
这是不可能的。我需要实例化一条记录才能获得默认值:
Afield = #specialfield{}
DefaultValue = Afeild#specialfield.raw
DefaultValue % => <<"default">>
有更简单的方法吗?我似乎应该有一些方法来检索默认值,而不必创建记录的实例。
答案 0 :(得分:2)
怎么样:
raw_default() -> <<"default">>.
-record(specialfield, { raw = raw_default() }).
现在你有一个默认的函数。这将非常快,因为它是对常量值的函数调用。如果这也太慢,请启用内联。
答案 1 :(得分:1)
构建空记录并访问一个字段可以在一行上完成:
(#specialfield{})#specialfield.raw.
答案 2 :(得分:1)
查看erlang - records,搜索部分&#34; 11.8&#34;。
记录没什么特别之处 - 它们只是运行时的元组。因此,要从#specialfield {}的内部表示形式的默认值元组中获取字段raw
,您将使用:
element(#specialfield.raw, #specialfield{}).
在这种情况下,#specialfield.raw
是#specialfield元组中raw
的值的索引。当您通过specialfield
格式传递解析为元组的{specialfield, <<"default">>}
时。