Elixir의 메타프로그래밍, 컴파일 타임 AST 검사 및 매크로 작성을 위한 빠른 구문 레퍼런스입니다.
🔗 관련 문서: Elixir 프로그래밍 언어 치트시트
특수 형식 및 의사 변수 (Special Forms & Pseudo-Variables)
Kernel.SpecialForms에 정의된 핵심 메타프로그래밍 구성요소:
__DIR__ # 현재 파일 디렉터리의 절대 경로 문자열
__MODULE__ # 현재 모듈 이름 원자(Atom)
__ENV__ # 현재 컴파일 환경 구조체 (Macro.Env)
__CALLER__ # 매크로 호출자의 환경 구조체
실행 환경 검사 (ENV)
# 컴파일 환경 내부 필드 검사
Map.keys(__ENV__)
# => [:__struct__, :aliases, :context, :context_modules, :export_vars, :file,
# :function, :functions, :lexical_tracker, :line, :macro_aliases, :macros,
# :module, :requires, :vars]
# 호출자 모듈에 정의된 함수/매크로 검사
__CALLER__.module |> Module.definitions_in() |> IO.inspect()
Quotes, AST 및 동적 디스패치 (Quotes, AST & Dynamic Dispatch)
# 추상 구문 트리 (AST) 생성
quote do: 1 + 2
# => {:+, [context: Elixir, import: Kernel], [1, 2]}
# quote 블록 내부에서 동적 값 주입 (unquote)
number = 10
quote do: 1 + unquote(number)
# 동적 함수 호출
apply(Enum, :reverse, [[1, 2, 3]])
# => [3, 2, 1]