将Erlang记录作为函数参数传递是否有任何缺点?

时间:2010-02-22 16:13:03

标签: erlang record

将Erlang记录作为函数参数传递是否有任何缺点?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

erlangs标准库中的一些函数确实在它们的接口中使用了记录(我不记得现在哪些 - 但也有一些),但在我看来,主要的挫折是,用户必须包含您的头文件,只是为了使用您的功能。

这对我来说似乎没有问题(你通常不会这样做,除非你使用stdlib中的所述函数),创建奇怪的相互依赖关系,并且更难以从shell中使用(我不会'从头脑中知道如何加载和使用shell中的记录 - 我通常只是通过手动构建元组来“欺骗”...)

此外,处理记录与您通常所做的事情有点不同,因为他们的默认密钥将原子'undefined'视为值,例如,与通常使用proplists的方式相反(不是一个值) “设置就是不存在” - 这可能会给那些通常不会记录很多工作的人带来一些困惑。

所以,总而言之,我通常更喜欢一个名单或类似的东西,除非我有充分的理由使用记录。但是,我通常使用记录作为内部状态,例如gen_server或gen_fsm;用这种方式更新会更容易一些。

答案 2 :(得分:2)

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

为什么你想做任何对任何erlang程序员都感到陌生的事情?已经有一个约定用于函数的可选命名参数。在没有正当理由的情况下发明另一种方法毫无意义。