相关疑难解决方法(0)

如何在编译时创建静态字符串

我想创建一个&'static str由重复的字符序列组成的长片,例如abcabcabc...

在Rust中有没有办法通过表达式来实现这一点,例如long_str = 1000 * "abc"在Python中,或者我是否必须在Python中生成它并将其复制/粘贴到Rust代码中?

rust

23
推荐指数
3
解决办法
5366
查看次数

处理传递给过程宏的编译时相关文本文件的正确方法

我需要将文本文件或文本文件的内容传递给过程宏,以便过程宏在编译时根据该文本文件的内容进行操作。也就是说,文本文件配置宏的输出。其用例是定义宏构建到库中的寄存器映射的文件。

第二个要求是文本文件由 正确处理Cargo,以便对文本文件的更改触发重新编译,就像对源文件的更改触发重新编译一样。

我最初的想法是使用宏创建一个static字符串include_str!。这解决了第二个要求,但我不知道如何将传递给宏 - 此时我只有要传入的字符串的标识符:

use my_macro_lib::my_macro;
static MYSTRING: &'static str = include_str!("myfile");
my_macro!(MYSTRING); // Not the string itself!
Run Code Online (Sandbox Code Playgroud)

我可以将一个字符串传递给宏,其中包含字符串文字中的文件名,然后在宏内打开该文件:

my_macro!("myfile");
Run Code Online (Sandbox Code Playgroud)

此时我有两个问题:

  1. 如何获取调用函数的路径以获取文件的路径并不明显。我最初认为这会通过 token 暴露Span,但似乎一般不会(也许我错过了一些东西?)。
  2. Cargo如何使文件 make触发更改后的重新编译并不明显。我必须强制执行的一个想法是在宏的输出中添加 an include_str!("myfile"),这有望导致编译器意识到“myfile”,但这有点麻烦。

有什么方法可以做我想做的事情吗?也许通过某种方式获取外部创建的宏内的字符串内容,或者可靠地获取调用 rust 文件的路径(然后Cargo正确进行处理更改)。

顺便说一句,我读过很多地方告诉我无法访问宏内变量的内容,但在我看来,这正是宏quote正在做的事情#variables。这是如何运作的?

rust rust-macros

6
推荐指数
1
解决办法
2148
查看次数

标签 统计

rust ×2

rust-macros ×1