Описание тега rust-decl-macros
2
ответа
Индексирование кортежей в макросе
Я пытаюсь индексировать кортеж данных в макросе, который генерирует подпись для реализации черты, но есть некоторые ошибки. Могу ли я индексировать кортеж или нужно другое решение? Взломать с tuple_index Я нашел в Google, но это не работает для меня…
13 фев '19 в 07:53
1
ответ
Как вернуть новую строку из декларативного макроса?
Так что я здесь, грузовик вместе с Rustlings, пока я не получу широкую поддержку с тестом 4. Он хочет, чтобы я написал макрос, который будет удовлетворять следующему коду: fn main() { if my_macro!("world!") != "Hello world!" { panic!("Oh no! Wrong o…
28 фев '19 в 17:14
1
ответ
Что означает символ @ в декларативном макросе?
Я видел @ символ используется в макросах, но я не могу найти упоминания о нем в Rust Book или в любой официальной документации или сообщениях в блоге. Например, в этом ответе переполнения стека он используется так: macro_rules! instructions { (enum …
28 янв '19 в 16:31
1
ответ
Построить все пары элементов (квадратичное множество) в декларативном макросе
У меня есть список идентификаторов, и я хочу вызвать макрос для каждой пары идентификаторов из этого списка. Например, если у меня есть a, b а также cЯ хотел бы создать это: println!("{} <-> {}", a, a); println!("{} <-> {}", a, b); print…
06 фев '19 в 11:41
0
ответов
Как сделать макрокоманду развернутой перед тем, как привести ее в Rust?
Я пытаюсь написать quine в Rust, используя только макросы. Для этого я встраиваю main функция в макрос f1и пытается вставить буквальное представление f1 в f2 с stringify!, Вот мой код до сих пор: macro_rules!f1{()=>(fn main(){println!("macro_rule…
03 мар '19 в 09:44
1
ответ
Как разобрать одиночные токены в макросах ржавчины
Я начинаю играть с макросами Rust и пришел, чтобы попробовать этот маленький практический пример. Я хочу определить макрос, который расширяется до инициализации переменной (имя не имеет значения) типа i32 (например, но не очень важно) и ряд операций…
04 май '19 в 08:11
1
ответ
Макро-соответствие токенов, рекурсивное расширение
Я пытаюсь реализовать макрос, который расширит программу "мозгового удара" (после того, как я начал с некоторого более простого кода, в котором у меня уже были проблемы с решением: как анализировать одиночные токены в макросах ржавчины). Проблема в …
05 май '19 в 00:37
1
ответ
Есть ли способ "сделать макрос вещи" в атрибуте без процедурного макроса?
В частности, я пытаюсь поместить вывод макроса в комментарий документа. Я был взволнован, что это делает именно то, что я хочу: /// foo /// #[doc="bar\n\nbaz"] /// /// quux struct Dummy; Следующим шагом будет замена этой строки моим контентом. По эт…
11 июн '19 в 17:03
1
ответ
Почему я получаю "неожиданный токен" при попытке вызвать внутренний макрос с аргументом внешнего макроса?
Я не понимаю эту ошибку при попытке передать выражение, полученное higher! макрос в lower! макрос: // A low-level macro using only Rust primitives. macro_rules! lower { (x, $a:expr) => { println!("x is {}", $a); }; (x($b:expr), $a:expr) => { p…
20 июн '19 в 19:11
2
ответа
Макрос для построения перечисления с разными "видами" элементов
Я пытаюсь придумать макрос, который я бы назвал как create_states!(S0, S1, final S2, final S3); Он создаст перечисление для представления состояний конечного автомата, и некоторые из них будут конечными (принимающими) состояниями - S2, S3. Результир…
24 сен '19 в 20:19
1
ответ
Как реализовать макрос, который определяет новый общедоступный тип и возвращает экземпляр этого типа?
Я хочу реализовать структуру, используя macro_rules! потому что для дженериков требуется много шаблонов и поиска признаков. Рассматриваемая структура имеет внутри хеш-таблицу, но ключ и типы значений должны быть предоставлены пользователем. Код выгл…
26 ноя '19 в 00:34
1
ответ
Могу ли я определить макрос, который будет расширяться до вызова функции?
Я (наивно) пробовал это, но на экран ничего не выводится: macro_rules! foo { ($suffix:tt, $arg:expr) => { concat!("foo", $suffix, "(", $arg, ")"); }; } fn foo_i32(x: i32) { println!("i32 {}", x); } fn foo_bool(x: bool) { println!("bool {}", x); }…
11 мар '20 в 16:17
1
ответ
Сгенерировать значение атрибута с помощью макроса
Предположим, у меня есть ident входной параметр с именем module_name. Как я могу сгенерировать значение атрибута с помощью этого параметра? Проще говоря, я хочу сгенерировать что-то вроде этого: macro_rules! import_mod { ( $module_name:ident ) =>…
27 апр '20 в 01:52
0
ответов
Как использовать макросы Rust в одном ящике?
У меня есть источники: src/ main.rs memory.rs chunk.rs memory.rs У меня есть макрос: #[macro_export] macro_rules! grow_capacity { ( $x:expr ) => { { if $x < 8 { 8 } else { $x * 2 } } }; } chunk.rs Хочу использовать: use crate::memory; // defin…
03 авг '20 в 19:44
1
ответ
Как сопоставить трейт в макросе Rust?
Моя цель - взять как входной тип признака. my_test_macro!(Trait1, Trait2<Test1, Test2=Test3>) До сих пор я пытался написать такой парсер. $( $ty:ident < $( $N:ident $(: $b0:ident $(+$b:ident)* )? ),* $($tname:ident=$ttype:ident),* > )+* …
05 ноя '19 в 17:33
2
ответа
Использовать локальные привязки на сайте вызова в макросах Rust "macro_rules"
Рассмотрим следующий фрагмент: macro_rules! quick_hello { ($to_print:expr) => { { let h = "hello"; println!("{}", $to_print) } } } fn main() { quick_hello!(h); } Если я его скомпилирую, то получу: error[E0425]: cannot find val…
17 сен '20 в 14:59
1
ответ
Как написать макрос, который отображает номер файла, строки и переменное количество аргументов?
Я нашел в Rust несколько полезных макросов, а именно: file!(), line!(), stringify!()Я также обнаружил, что Rust допускает макросы с переменными аргументами, как указано здесь: macro_rules! print_all { ($($args:expr),*) => {{ $( println!("{}&…
15 окт '20 в 17:42
1
ответ
Как сгенерировать макрос из предыдущего кода, сгенерированного макросом?
Чтобы создать класс Python на основе pyo3, работающий со структурой, использующей универсальный тип, я хочу использовать оболочки, которые будут генерировать код, необходимый для того, чтобы не делать это для каждого конкретного типа. Я создал макро…
20 май '21 в 20:34
1
ответ
Как принять необязательную конечную запятую в декларативном макросе? [дубликат]
macro_rules! hashmap { ($($key:expr => $value:expr),*) => { { let mut _map = std::collections::HashMap::new(); $( _map.insert($key, $value); )* _map }; }; } let map = hashmap! { "a" => 1, "b" => 2, }; Я определил макрос хэш-карты во вне…
27 июн '21 в 19:01
2
ответа
Как я могу сгенерировать границы признаков в декларативном макросе?
У меня есть черта с большим количеством связанных типов. Мне нужна функция, которая использует эти связанные типы по обе стороны от границы предложения where: trait Kind { type A; type B; // 20+ more types } trait Bound<T> {} fn example<K1,…
10 авг '21 в 16:52