지시자
매크로의 인자는 달러 기호 $가 접두사로 붙으며, 지시자(designator)로 타입이 어노테이션됩니다:
macro_rules! create_function {
// 이 매크로는 지시자 `ident` 인자를 취하여
// `$func_name`이라는 이름의 함수를 생성합니다.
// `ident` 지시자는 변수/함수 이름에 사용됩니다.
($func_name:ident) => {
fn $func_name() {
// `stringify!` 매크로는 `ident`를 문자열로 변환합니다.
println!("당신은 {:?}()를 호출했습니다",
stringify!($func_name));
}
};
}
// 위의 매크로를 사용하여 `foo`와 `bar`라는 이름의 함수를 생성합니다.
create_function!(foo);
create_function!(bar);
macro_rules! print_result {
// 이 매크로는 `expr` 타입의 표현식을 취하여
// 결과와 함께 문자열로 출력합니다.
// `expr` 지시자는 표현식에 사용됩니다.
($expression:expr) => {
// `stringify!`는 표현식을 *있는 그대로* 문자열로 변환합니다.
println!("{:?} = {:?}",
stringify!($expression),
$expression);
};
}
fn main() {
foo();
bar();
print_result!(1u32 + 1);
// 블록도 표현식이라는 점을 기억하세요!
print_result!({
let x = 1u32;
x * x + 2 * x - 1
});
}
사용 가능한 지시자들의 일부는 다음과 같습니다:
blockexpr은 표현식에 사용됩니다ident는 변수/함수 이름에 사용됩니다itemliteral은 리터럴 상수에 사용됩니다pat(패턴)pathstmt(문장)tt(토큰 트리)ty(타입)vis(가시성 한정자)
전체 목록은 Rust 레퍼런스를 참조하세요.