【问题标题】:Erlang: Removing Fields in RecordsErlang:删除记录中的字段
【发布时间】:2011-04-14 09:17:04
【问题描述】:

假设您有以下类型的 Erlang 歌曲记录:

rd(song, {artist, title, album}).
Song = #song{artist = <<"oasis">>, title = <<"wonderwall">>, album = <<"morning glory">>}.

但您想重新格式化歌曲记录以仅包含艺术家和标题。您将如何删除 Erlang 记录(在本例中为专辑)中的字段?

【问题讨论】:

    标签: erlang records


    【解决方案1】:

    如果你真的,真的想从现有的记录元组中删除一个字段,这是可能的。

    您可以使用tuple_to_listlist_to_tuple 函数,也许还可以使用#song.title 语法来获取字段的索引,将其从列表中删除并转换回元组。

    但这可能不是一个好主意。

    【讨论】:

      【解决方案2】:

      在某种意义上你不能,因为记录都是在编译时完成的,所以它们并不真正存在。你是#song 记录成为元组{song,Artist,Title,Album}。它是这样定义的。见Erlang -- Records。您需要做的是定义一个新的#song 记录并手动转换所有歌曲,即创建新的元组。请记住,所有数据都是不可变的。

      有许多建议可以实现更动态的字段对象,但尚未被接受。

      阅读 Erlang 文档,它通常是相当不错的。

      【讨论】:

      • 你觉得有序字典更合适吗?
      • 如果您正在处理少量元素,使用 proplists 应该非常有效。 Proplists 是这样的 2 元素元组列表:[{artist, "Queen"}, {song, "We Will Rock You"}, {album, "News Of The World"}]
      • proplist 对于每首歌曲的数据都可以。它会慢一点,但会更有活力。使用有序字典或任何其他形式的字典也是如此。 orddict 的行为与 proplist 的行为非常相似。不要为此使用dict,因为空字典的开销更大,而且每首歌曲可能没有那么多数据。那么问题是如何存储所有歌曲的数据以及如何索引它们。对于这个dict 是合理的,或者是一个ets 表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      相关资源
      最近更新 更多