在erlang中,与元素匹配的元组模式是个好主意吗?

时间:2014-12-02 04:04:43

标签: erlang

我是Erlang的新手,我一直在阅读一些声称原子不是垃圾收集的文档。这一切都很好,但随后又提出了一个更大的问题:将它们用作"元组标签"是一个好主意。用于模式匹配?如果我有一个使用相对较多的Erlang应用程序,以及这样的函数:

-module(geometry).
-export([area/1]).
area({rectangle, Width, Ht}) -> Width * Ht;
area({square, X}) -> X * X;
area({circle, R}) -> 3.14159 * R * R.

这会让我的VM崩溃吗?如果area函数运行了300万次,那么因为矩形,正方形和圆形是原子,我的Erlang VM不会崩溃吗?

1 个答案:

答案 0 :(得分:5)

只要您不动态创建原子,这不是问题,因为编译器/ VM将在内部使用相同的原子对象来表示原子rectangle的所有用途 - 使用中只有一个rectanglecircle等原子。

此规则的例外情况是使用list_to_atom/1函数动态创建原子以从列表/字符串创建原子。这通常被认为是一个非常糟糕的主意。