Указатели

Аргументы макроса имеют префикс знака доллара $ и тип аннотируется с помощью указателей фрагмента:

macro_rules! create_function {

// Этот макрос принимает аргумент идентификатора `ident` и

// создаёт функцию с именем `$func_name`.

// Идентификатор `ident` используют для обозначения имени переменной/функции.

($func_name:ident) => (

fn $func_name() {

// Макрос `stringify!` преобразует `ident` в строку.

println!("Вызвана функция {:?}()",

stringify!($func_name))

}

)

}

// Создадим функции с именами `foo` и `bar` используя макрос, указанный выше.

create_function!(foo);

create_function!(bar);

macro_rules! print_result {

// Этот макрос принимает выражение типа `expr` и напечатает

// его как строку вместе с результатом.

// Указатель `expr` используют для обозначения выражений.

($expression:expr) => (

// `stringify!` преобразует выражение в строку *без изменений*.

println!("{:?} = {:?}",

stringify!($expression),

$expression);

)

}

fn main() {

foo();

bar();

print_result!(1u32 + 1);

// Напомним, что блоки тоже являются выражениями!

print_result!({

let x = 1u32;

x * x + 2 * x - 1

});

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Это список всех указателей:

• block

• expr используют для обозначения выражений

• ident используют для обозначения имени переменной/функции

• item

• literal используется для литеральных констант

• pat (образец)

• path

• stmt (единственный оператор)

• tt (единственное дерево лексем)

• ty (тип)

• vis (спецификатор видимости)

Полный список указателей, вы можете увидеть в Rust Reference.

Загрузка...