在 Erlang 中,record_info 和 tuple_to_list 返回相同的键顺序吗?

2024-02-12

即,如果我有记录

-record(one, {frag, left}).
  • Is record_info(fields, one)即将always return [frag, left]?
  • Is tl(tuple_to_list(#one{frag = "Frag", left = "Left"})) always会变成["Frag", "Left"]?

这是实施细节吗? 多谢!


简短的回答是:是的,在撰写本文时它会起作用。更好的答案是:将来可能不会这样,问题的本质与我有关。

使用安全record_info/2,尽管依赖顺序可能有风险,而且坦率地说,我无法想到这样做有意义的情况,这意味着您正在以错误的方式解决问题。您能否分享更多有关您想要实现的目标的详细信息,以便我们帮助您选择更好的方法?也许简单的模式匹配就足够了。

至于例子tuple_to_list/1,我引用 Cesarini 和 Thompson 的《Erlang 编程》:

“……无论你做什么,永远不要在你的程序中使用记录的元组表示。如果你这样做,本书的作者将与你断绝关系,并否认参与帮助你学习 Erlang。”

有几个很好的理由,包括:

  1. 您的代码将变得脆弱 - 如果您稍后更改字段的数量或其顺序,您的代码将会损坏。
  2. 无法保证记录的内部表示在 erlang 的未来版本中将继续以这种方式工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Erlang 中,record_info 和 tuple_to_list 返回相同的键顺序吗? 的相关文章

随机推荐