2016-03-14 2 views
4

Я пытаюсь написать макрос, который превратит число в строковый литерал, подобно тому, как макрос stringify! может превратить свой аргумент в &str ,Поверните число в строковый литерал, похожий на stringify!()

Более конкретно, как бы я это пишу:

byte_stringify!(10) -> b"10"

Я буду использовать это, чтобы создать большое количество const структур, так что я не могу полагаться на вызов метода str.

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

make_arg!(10) -> b"x10y"

Update:

Где делали старую bytes! макро идти? Я думаю, что хочу: bytes!(stringify!(10))

ответ

5

Вы не можете; по крайней мере, не без написания плагина компилятора, что далеко выходит за рамки простого ответа переполнения стека.

Там какая-то основная документация по данному вопросу в Compiler Plugins главе Rust книги, хотя имейте в виду, что плагины компилятор только работа по ночам ржавчине; они не работают ни в одном стабильном или бета-релизе, а также блокируют любой ящик, который использует их для ночной ржавчины.

Извините.

+0

Что случилось с байтами! макрос? Кажется, это то, чего я хочу. – JasonN

+0

@JasonN Он удален и, по крайней мере, [два] (https://github.com/rust-lang/rfcs/pull/566) [предложения] (https://github.com/rust-lang/rust/ тянуть/18702), чтобы вернуть его, были отброшены назад. –

+0

Это странно. Это то же самое, что stringify!(), Но для байтов. Почему бы не удалить строку тоже? Те же аргументы применимы. Я собираюсь начать другое предложение, но с моим вариантом использования (differenr из двух других). Кажется, что довольно много случаев, о которых разработчики не думали. – JasonN

Смежные вопросы