2014-12-02 56 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

相關問題