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

Tom*_*ert 1 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.
Run Code Online (Sandbox Code Playgroud)

这可能会导致我的VM崩溃吗?如果该area函数运行了三百万次,那么因为矩形,正方形和圆形是原子而不会使我的Erlang VM崩溃吗?

jjm*_*jjm 5

只要你不是在创造原子动态,这不是一个问题,因为编译器/ VM将使用同一个原子对象在内部代表原子的所有用途rectangle-只有永远一个rectangle,circle等原子使用.

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