将Erlang记录作为函数参数传递有什么缺点吗?

将Erlang记录作为函数参数传递有什么缺点吗?,erlang,record,Erlang,Record,作为函数参数传入Erlang记录有什么缺点吗?没有缺点,除非调用方函数和被调用函数使用不同的记录“版本”进行编译。我认为最大的缺点是它不是惯用的。您是否见过一个API要求您构造一个记录并将其传入 为什么要做一些对任何erlang程序员来说都是陌生的事情?对于函数的可选命名参数,已有一种约定。在没有正当理由的情况下发明另一种方法是毫无意义的。erlangs标准库中的一些函数确实在其接口中使用记录(我现在记不起是哪些函数,但也有一些),但在我看来,主要的缺点是,用户必须包含头文件,才能使用您的函数

作为函数参数传入Erlang记录有什么缺点吗?

没有缺点,除非调用方函数和被调用函数使用不同的记录“版本”进行编译。

我认为最大的缺点是它不是惯用的。您是否见过一个API要求您构造一个记录并将其传入


为什么要做一些对任何erlang程序员来说都是陌生的事情?对于函数的可选命名参数,已有一种约定。在没有正当理由的情况下发明另一种方法是毫无意义的。

erlangs标准库中的一些函数确实在其接口中使用记录(我现在记不起是哪些函数,但也有一些),但在我看来,主要的缺点是,用户必须包含头文件,才能使用您的函数

对我来说,这似乎不太可能(除非您使用stdlib中的上述函数,否则您通常不会这样做),这会产生奇怪的相互依赖关系,并且从shell中使用起来更困难(我根本不知道如何从shell加载和使用记录——我通常只是通过手动构造元组来“欺骗”…)

此外,处理记录与您通常所做的有点不同,因为它们的默认键将atom“undefined”作为值,这与您通常使用PropList来处理记录的方式相反,例如(没有设置的值只是不存在)——这可能会给通常不经常处理记录的人带来一些困惑


所以,总而言之,我通常更喜欢道具列表或类似的东西,除非我有很好的理由使用唱片。不过,我通常使用记录来表示gen_服务器或gen_fsm的内部状态;通过这种方式进行更新比较容易。

啊,是的,当然,因为它们是一种编译时功能。在客户端API中使用记录可能不是一个好主意?不,我认为在使用正确版本的.hrl文件时使用记录是很好的。它广泛应用于第三方模块和应用程序以及一些核心模块。只要一个函数的返回值是一条记录,为什么它不能用作另一条记录的输入?你能给我发个链接到你找到的@gleber吗,因为我找不到它?在谷歌第四名的节目中输入“erlang记录”。此页面包含有关内部表示的信息,以及在使用记录时需要有记录定义的信息。这应该足以再次推断出答案:)你的评论确实让stackoverflow值得一看,因为你对计算机充满热情,我喜欢!不管怎样,你能解释一下你是如何从这一页中推断出答案的,因为现在的答案是不同的吗?这两个对我都很有用。我认为@Dustin的答案有其优点,因为运行时记录只是元组,所以“没有缺点”。记录是编译时的生物,因此“…除非使用不同的记录“版本”进行编译”,因为元组的大小不匹配@达斯汀的观点是基于经验,所以不能从手册中推断出来。您让我明白了:)在将大量(通常是可选的)参数传递到API@gleber,实际上,自从我发布这篇文章后,我就使用了PropList,是的,我同意记录和编译时版本的问题。不管怎样,“道具清单”看起来真的很“干净”,谢谢