Как вы заметили, вы можете использовать скобки, квадратные скобки или фигурные скобки для вызова макроса:
let a = vec!(0, 1, 2);
let b = vec![0, 1, 2];
let c = vec! { 0, 1, 2 };
Макросам не важно, какой из этих синтаксисов вы используете 1 . Программисты заботятся о том, какой синтаксис вы используете.
В массиве и синтаксисе Rust используются квадратные скобки, и Vec
s тесно связаны с ними обоими.Использование квадратных скобок для построения Vec
- это просто соглашение о языке.Rustfmt автоматически преобразует вызовы в vec!
в квадратные скобки.
1 - существует небольшое взаимодействие между тем, какой стиль скобок вы используете при вызове макроса и точки с запятой.Макрос, используемый как оператор item или , должен заканчиваться точкой с запятой, если он не использует фигурные скобки:
macro_rules! dummy {
() => {};
}
// Not OK
dummy!()
// OK
dummy! {}
// OK
dummy!();