-record(one, {frag, left}).
record_info(fields, one)
总是返回[frag,
left]
?tl(tuple_to_list(#one{frag = "Frag", left = "Left"}))
总是会["Frag", "Left"]
?这是一个实施细节吗? 非常感谢!
答案 0 :(得分:2)
简短的回答是:是的,截至撰写本文时,它将起作用。更好的答案是:将来可能不会那样,问题的本质就是我。
使用record_info/2
是安全的,虽然依赖订单可能有风险,坦率地说,我无法想到这样做的情况,这意味着你以错误的方式解决问题。您能否分享更多关于您要完成的内容的详细信息,以便我们帮助您选择更好的方法?可能只需要简单的模式匹配。
关于tuple_to_list/1
的例子,我将引用Cesarini和Thompson的“Erlang Programming”:
“......无论你做什么,永远不要在你的程序中使用记录的元组表示。如果你这样做,本书的作者会否认你并拒绝参与帮助你学习Erlang。”
有几个很好的理由,包括:
答案 1 :(得分:1)
是的,在这两种情况下,Erlang都会保留“原始”订单。是的它是实现,因为它没有在功能规范或文档中特别说明,虽然它是一个非常安全的赌注,它将保持这样。
答案 2 :(得分:1)
是的,订单始终是相同的,因为由元组表示的记录是哪个订单是必不可少的属性。另请参阅我关于记录的其他答案:Syntax Error while accessing a field in a record