Я видел символ @
, используемый в макросах, но я не могу найти упоминания о нем в Rust Book или в любой официальной документации или сообщениях в блоге.Например, в этот ответ о переполнении стека используется следующим образом:
macro_rules! instructions {
(enum $ename:ident {
$($vname:ident ( $($vty: ty),* )),*
}) => {
enum $ename {
$($vname ( $($vty),* )),*
}
impl $ename {
fn len(&self) -> usize {
match self {
$($ename::$vname(..) => instructions!(@count ($($vty),*))),*
}
}
}
};
(@count ()) => (0);
(@count ($a:ty)) => (1);
(@count ($a:ty, $b:ty)) => (2);
(@count ($a:ty, $b:ty, $c:ty)) => (3);
}
instructions! {
enum Instruction {
None(),
One(u8),
Two(u8, u8),
Three(u8, u8, u8)
}
}
fn main() {
println!("{}", Instruction::None().len());
println!("{}", Instruction::One(1).len());
println!("{}", Instruction::Two(1, 2).len());
println!("{}", Instruction::Three(1, 2, 3).len());
}
В результате использования выясняется, что он используется для объявления другого макроса, локального по отношению к основному..
Что означает этот символ и почему вы используете его, а не просто создаете другой макрос верхнего уровня?