tuple 与 list 的选择

tuple 和 list 在读取和修改有性能方面的差异。具体请阅读官方文档。

问题

很多函数都以 tuple 的形式返回结果,为何不以 list 的形式返回,如 [:ok, "hello"]? 官方文档上说 guide you to do the right thing,但这个例子没看出来有什么性能上的区别。

[:ok, result] = [:ok, "hello"]{:ok, result} = {:ok, "hello"} 我觉得都可以啊。

解答

参照 stackoverflow 上的解答,我觉得最主要是取决于:

  • LIST: You will use this when you cannot know when you write your program how many term this list will contain
  • Tuple : You will use a tuple when you know how many term it will contain when you write your program

函数返回值是否要考虑长度变化是关键。

因为 {:ok, a} = {:ok, 1, 2} 无法匹配,而 [:ok | a] = [:ok, 1, 2] 是可以的。([:ok, a] = [:ok, 1, 2] 也是无法匹配的)