在某些情况下,如果我将两个参数传递给函数,我会发现它更清楚,例如两个列表,而不是传递包含两个列表的元组。哪个被认为是更好的风格?效率有何不同?
感谢。
答案 0 :(得分:4)
这主要是品味和精心设计的API。如果你遵循“不要让我思考”的理念,你最终可能会采用两种方式。
在参数中使用元组有时会让人感到困惑,因为它非常重要,必须记录在案。例如,lists:zip({List1, List2})
会让人感到困惑,因为单独发送列表更直观。
如果两个列表属于一起并且在使用之前将通过多个函数,则将它们组合成一个元组可以很方便,这样路上的函数就不必单独传递它们。这使得元组几乎是一个可以传递的轻量级“对象”。理解“对象”的函数既可以查看它,也可以将其拆分并调用更深入的函数,这些函数可以单独对元素进行操作。
有时这两个列表彼此如此相关,以便始终将它们保存在元组中更有意义:
aquire(Caller, {[Item|Free], Busy}) -> {Free, [{Caller, Item}|Busy]};
aquire(_Caller, {[], _Busy}) -> {error, no_free_items}.