Как правильно написать макрос для такого выражения?

Хочу написать макрос вида:
name![type; {el, ..., el}, ... , {el, ... , el}]

Написал такое:
[$type:ty, ($row:block ($el:expr)+)+] => {
}

Но выдает ошибку при
name![i32; {1}]: missing tokens in macro arguments
Собственно вопрос в заголовке, а также можно ли как-то узнать, сколько раз повторялись элементы в скобках и само количество скобок?
  • Вопрос задан
  • 307 просмотров
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Вот эта ошибка:
missing tokens in macro arguments

Означает, что раст не может сматчить макрос с таким аргументом. Дело в том, что "1" не является BlockExpression, который ты ожидаешь в начале (https://doc.rust-lang.org/reference/expressions/bl...)

Вот примерно рабочий макрос, который ничего не делает.
macro_rules! name {
    ($t: ty, $({$($el:expr ),*}),*) => {42};
    
}
fn main() {
    name!(i32, {1, 2, 3 ,4}, {1,2});
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы