我想创建一个&'static str
由重复的字符序列组成的长片,例如abcabcabc...
在Rust中有没有办法通过表达式来实现这一点,例如long_str = 1000 * "abc"
在Python中,或者我是否必须在Python中生成它并将其复制/粘贴到Rust代码中?
我需要将文本文件或文本文件的内容传递给过程宏,以便过程宏在编译时根据该文本文件的内容进行操作。也就是说,文本文件配置宏的输出。其用例是定义宏构建到库中的寄存器映射的文件。
第二个要求是文本文件由 正确处理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)
此时我有两个问题:
Span
,但似乎一般不会(也许我错过了一些东西?)。Cargo
如何使文件 make触发更改后的重新编译并不明显。我必须强制执行的一个想法是在宏的输出中添加 an include_str!("myfile")
,这有望导致编译器意识到“myfile”,但这有点麻烦。有什么方法可以做我想做的事情吗?也许通过某种方式获取外部创建的宏内的字符串内容,或者可靠地获取调用 rust 文件的路径(然后Cargo
正确进行处理更改)。
顺便说一句,我读过很多地方告诉我无法访问宏内变量的内容,但在我看来,这正是宏quote
正在做的事情#variables
。这是如何运作的?