【问题标题】:Get default value from Erlang record definition?从 Erlang 记录定义中获取默认值?
【发布时间】:2014-05-17 01:09:48
【问题描述】:

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

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

我想有一些方法来检索raw 字段的默认值。这样的事情会很简单:

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

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

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

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

【问题讨论】:

标签: erlang record default-value


【解决方案1】:

怎么样:

raw_default() -> <<"default">>.

-record(specialfield, { raw = raw_default() }).

现在你有了一个带有默认值的函数。这将非常快,因为它是对常量值的函数调用。如果这也太慢,请启用内联。

【讨论】:

    【解决方案2】:

    构造一条空记录并访问一个字段可以在一行中完成:

    (#specialfield{})#specialfield.raw.
    

    【讨论】:

      【解决方案3】:

      看看erlang - records,搜索“11.8”部分。

      记录没有什么特别之处——它们只是运行时的元组。因此,要从默认值元组中获取字段raw,即#specialfield{} 的内部表示,您可以使用:

      element(#specialfield.raw, #specialfield{}).
      

      在这种情况下,#specialfield.raw 是#specialfield 元组中raw 值的索引。当你传入specialfield 时,它会解析为{specialfield, &lt;&lt;"default"&gt;&gt;} 形式的元组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-03
        • 2013-03-28
        • 2017-10-01
        • 2013-01-18
        相关资源
        最近更新 更多