将参数传递给函数:两个元素元组v。两个单独的参数?

时间:2015-10-03 03:47:23

标签: erlang

在某些情况下,如果我将两个参数传递给函数,我会发现它更清楚,例如两个列表,而不是传递包含两个列表的元组。哪个被认为是更好的风格?效率有何不同?

感谢。

1 个答案:

答案 0 :(得分:4)

这主要是品味和精心设计的API。如果你遵循“不要让我思考”的理念,你最终可能会采用两种方式。

在参数中使用元组有时会让人感到困惑,因为它非常重要,必须记录在案。例如,lists:zip({List1, List2})会让人感到困惑,因为单独发送列表更直观。

如果两个列表属于一起并且在使用之前将通过多个函数,则将它们组合成一个元组可以很方便,这样路上的函数就不必单独传递它们。这使得元组几乎是一个可以传递的轻量级“对象”。理解“对象”的函数既可以查看它,也可以将其拆分并调用更深入的函数,这些函数可以单独对元素进行操作。

有时这两个列表彼此如此相关,以便始终将它们保存在元组中更有意义:

aquire(Caller, {[Item|Free], Busy}) -> {Free, [{Caller, Item}|Busy]};
aquire(_Caller, {[], _Busy})        -> {error, no_free_items}.