sab123: (Default)
[personal profile] sab123
Во Рже (Rust) макросы являются частью языка, и работают на самом деле не на исходном тексте программы, а уже на синтаксическом дереве разбора. Причем там есть два вида макросов - один определяется попроще, через pattern matching аргументов, другой заморачивается деревом как оно есть. Вот так выглядит определение макроса assert! (макросы там все вызываются восклицательным знаком) через два возможных паттерна, с одним аргументом и многими аргументами (в дополнительных аргументах можно дать сообщение об ошибке):

macro_rules! assert {
    ($cond:expr $(,)?) => {
        if !$cond {
            panic!("assertion failed: {}", stringify!($cond));
        }
    };
    ($cond:expr, $($arg:tt)+) => {
        if !$cond {
            panic!($($arg)+);
        }
    };
}


Через двоеточие в определении аргумента в паттерне указывается его тип.

У меня есть ощущение, что такими макросами наверное можно сделать аналог темплейтов из C++.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

January 2026

S M T W T F S
     12 3
45 6 7 8 9 10
11 12 13 14 151617
1819202122 23 24
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 26th, 2026 01:57 am
Powered by Dreamwidth Studios