2014-12-02 20 views
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. 

将这种风险撞毁我的虚拟机?如果area函数运行三百万次,那么会不会使我的Erlang虚拟机崩溃,因为矩形,正方形和圆形是原子?

+0

从https://pragprog.com/articles/erlang复制的示例代码 – Tombert 2014-12-02 04:05:09

+1

不可以。完全正常的做事方式。 – zxq9 2014-12-02 07:13:54

回答

5

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

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

+0

我觉得自己没搞清楚,我觉得有点傻,但我想我们都必须从某个地方开始。谢谢您的帮助! – Tombert 2014-12-02 04:54:57

相关问题