从Erlang记录定义中获取默认值?

时间:2014-05-16 14:50:07

标签: erlang record default-value

是否有一种简单的方法可以从Erlang记录定义中获取默认值?假设我有这样的事情:

-record(specialfield, {
    raw = <<"default">> :: string()
}).

我想通过某种方式检索raw字段的默认值。这样的事情会非常简单:

 #specialfield.raw % => <<"default">>

这是不可能的。我需要实例化一条记录才能获得默认值:

 Afield = #specialfield{}
 DefaultValue = Afeild#specialfield.raw
 DefaultValue % => <<"default">>

有更简单的方法吗?我似乎应该有一些方法来检索默认值,而不必创建记录的实例。

3 个答案:

答案 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">>}时。