2014-12-02 3 views
1

저는 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이 충돌하지 않습니까?

+0

예제 코드는 https://pragprog.com/articles/erlang에서 복사했습니다. – Tombert

+1

아니요. 모든 일을하는 정상적인 방법. – zxq9

답변

5

원자를 동적으로 생성하지 않는 한 컴파일러/VM은 동일한 원자 객체를 내부적으로 사용하여 모든 원자 사용을 나타 내기 때문에 rectangle - rectangle은 하나뿐이므로, circle 등의 원자가 사용됩니다.

이 규칙의 예외는 list_to_atom/1 함수를 사용하여 동적으로 원자를 만들어서 목록/문자열에서 원자를 만들 때입니다. 이것은 일반적으로 슈퍼 나쁜 생각으로 간주됩니다.

+0

나 자신을 알아 내지 못해서 어리석은 느낌이 들지만, 우리 모두는 어딘가에서 시작해야한다고 생각합니다. 도와 주셔서 감사합니다! – Tombert

관련 문제