Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpMcRl 108 of 288 menu
◀ ▶

Правило макроса в Rust

Правило связывает форму вызова с телом, которое подставят вместо этой записи. Слева в скобках перечисляют, что должно стоять в вызове: имя фрагмента и его вид, например одно выражение. Справа от стрелки пишут код, который окажется на месте вызова после развертывания.

Объявим макрос с именем twice, который удваивает переданное выражение, и проверим результат в main:

macro_rules! twice { ($n:expr) => { $n + $n }; } fn main() { let v = twice!(3); println!("{}", v); }

На экране число 6. Компилятор заменил вызов на сложение 3 + 3 внутри функции, хотя в исходнике была короткая запись с именем макроса. Отдельного вызова функции с передачей аргумента во время работы здесь нет.

Тот же макрос можно использовать с другим выражением, если оно подходит под образец:

macro_rules! twice { ($n:expr) => { $n + $n }; } fn main() { let a = 4; let v = twice!(a + 1); println!("{}", v); }

Дано число:

let num = 5;

Опишите макрос twice по образцу урока, подставьте это число в вызов и выведите результат.

Дано число:

let num = 2;

Добавьте макрос удвоения выражения, сложите это число с 3 через вызов макроса и выведите итог.

Скажите, когда компилятор подставляет тело макроса: до сборки или во время работы программы, и чем это отличается от обычной функции.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить