【问题标题】:Is tuple pattern matching with atoms a good idea in erlang?在 erlang 中,与原子匹配的元组模式是一个好主意吗?
【发布时间】:2015-01-30 05:49:36
【问题描述】:

我是 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 函数运行了 300 万次,我的 Erlang VM 不会因为矩形、正方形和圆形都是原子而崩溃吗?

【问题讨论】:

标签: erlang


【解决方案1】:

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

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

【讨论】:

  • 我觉得自己没有弄清楚这一点有点傻,但我想我们都必须从某个地方开始。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2015-05-06
  • 2012-10-12
  • 2013-07-20
  • 1970-01-01
  • 2016-06-11
  • 2019-09-03
  • 2015-02-09
  • 1970-01-01
相关资源
最近更新 更多