Введение
В этом лабораторном задании мы исследуем переменные интерфейсы, то есть интерфейсы, которые могут принимать произвольное количество аргументов. В качестве примера мы модифицируем макрос calculate! из предыдущего раздела, чтобы он был переменным, позволяя одновременно вычислять несколько выражений.
Примечание: Если в лабораторном задании не указано имя файла, вы можете использовать любое имя файла, которое хотите. Например, вы можете использовать
main.rs, скомпилировать и запустить его с помощьюrustc main.rs &&./main.
Переменные интерфейсы
Переменный интерфейс принимает произвольное количество аргументов. Например, println! может принимать произвольное количество аргументов, определяемое строкой формата.
Мы можем расширить наш макрос calculate! из предыдущего раздела, чтобы он был переменным:
macro_rules! calculate {
// Паттерн для одного `eval`
(eval $e:expr) => {
{
let val: usize = $e; // Принудительно определяем типы как целые числа
println!("{} = {}", stringify!{$e}, val);
}
};
// Рекурсивно разбираем несколько `eval`
(eval $e:expr, $(eval $es:expr),+) => {{
calculate! { eval $e }
calculate! { $(eval $es),+ }
}};
}
fn main() {
calculate! { // Смотрите, что я сделал! Переменный `calculate!`!
eval 1 + 2,
eval 3 + 4,
eval (2 * 3) + 1
}
}
Вывод:
1 + 2 = 3
3 + 4 = 7
(2 * 3) + 1 = 7
Резюме
Поздравляем! Вы завершили лабораторную работу по Переменным интерфейсам. Вы можете выполнить больше лабораторных работ в LabEx, чтобы улучшить свои навыки.