Как передать переменную как строковый литерал в Rust? - PullRequest
0 голосов
/ 07 апреля 2020

Я использую макрос hex!, который принимает только строковые литералы. У меня есть значение, возвращенное из функции и сохраненное в переменной. Я не могу жестко закодировать значения и вызвать эту функцию. Итак, как я могу вызвать макрос hex! с переменной?

Это мой рабочий код:

let account: AccountId32 = hex_literal::hex!["d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"].into();

, и это код, где я сталкиваюсь с ошибкой:

let account_id = "d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d";
let account: AccountId32 = hex_literal::hex!(&account_id).into();

Ошибка:

error: proc-macro derive panicked
  --> src/examples/example_substratekitties.rs:49:32
   |
49 |     let account: AccountId32 = hex_literal::hex!(&account_id).into();
   |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: message: expected one string literal
   = note: this warning originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)

Все примеры макроса hex! демонстрируют его только со строковыми литералами.

1 Ответ

5 голосов
/ 07 апреля 2020

Вы не можете. Это буквально невозможно. Литерал - это нечто, где значение записывается дословно в исходном коде программы.

Не используйте этот макрос, потому что он не выполняет то, что вы хотите (выделение мое):

Этот ящик предоставляет макрос hex! для преобразования шестнадцатеричного строкового литерала в байтовый массив во время компиляции .

Возможно, вам нужен шестнадцатеричный ящик ?

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...