[Rust] 맀크둜

λŸ¬μŠ€νŠΈμ—μ„œλ„ λ§€ν¬λ‘œν•¨μˆ˜λ₯Ό μ§€μ›ν•œλ‹€. μ—¬νƒœκ» μ‹ λ‚˜κ²Œ 썼던 println!만 해도 λ§€ν¬λ‘œν•¨μˆ˜μ˜€λ‹€.

λ§€ν¬λ‘œν•¨μˆ˜μ˜ 선언은 λ‹€μŒκ³Ό 같이 ν•œλ‹€.
macro_rules! 맀크둜λͺ…
{
**Β Β Β  νŒ¨ν„΄1=>ν‘œν˜„μ‹1;**
**Β Β Β  νŒ¨ν„΄2=>ν‘œν˜„μ‹2;**
**Β Β Β  ...**
}

μ•„λž˜λŠ” 인자λ₯Ό λ°›μ§€ μ•ŠλŠ”, κ°„λ‹¨ν•œ 맀크둜λ₯Ό κ΅¬ν˜„ν•œ 것이닀. ()λŠ” 인자λ₯Ό λ°›μ§€ μ•ŠλŠ”λ‹€λŠ” λœ»μ΄λ‹€. image

image

인자λ₯Ό λ°›λŠ”λ‹€λ©΄, $인자λͺ…:ν˜•μ‹μœΌλ‘œ 인자λ₯Ό μ†Œκ΄„ν˜Έ μ•ˆμ— μ§€μ •ν•  수 μžˆλ‹€.
μ•„λž˜μ—μ„œλŠ” expr을 μΌλŠ”λ°, ν‘œν˜„μ‹μ΄λ©΄ λ‹€ λ°›λŠ”λ‹€λŠ” λœ»μ΄λ‹€. image

image 잘 λŒμ•„κ°„λ‹€.

μ΄λ ‡κ²Œ νŒ¨ν„΄μ„ μ—¬λŸ¬κ°œ μ§€μ •ν•  μˆ˜λ„ μžˆλ‹€. image

image

κ°€λ³€μΈμžλ₯Ό μ„€μ •ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.
그러렀면 νŒ¨ν„΄μ— $(...), *λ₯Ό μ”Œμ›Œμ„œ λ°˜λ³΅μ„ λ‚˜νƒ€λ‚΄κ³ , λ°˜λ³΅ν•  μ½”λ“œμ—μ„œλ„ $(...)*λ₯Ό λΆ™μ—¬ 인자λ₯Ό ν’€μ–΄λ‚΄λ©΄ λœλ‹€. image

image μ΄λ ‡κ²Œ.

μœ„μ—μ„œλŠ” ν‘œν˜„μ‹μ„ λ‹€ λ°›λŠ” exprλ₯Ό μΌμ§€λ§Œ, 이외에도 단일 μ‹λ³„μžλ§Œμ„ λ°›λŠ” identκ°€ 있고. pat(νŒ¨ν„΄), ty(νƒ€μž…), item(?), block(μ€‘κ΄„ν˜ΈλΈ”λŸ­), stmt(ꡬ문), path(μ€‘μ²©νƒ€μž…, tt(단일토큰), vis(?), literal(λ¦¬ν„°λŸ΄κ°’) 등이 μžˆλ‹€.


μ°Έμ‘°
https://doc.rust-lang.org/reference/macros-by-example.html