Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 我可以使用宏替换代码块中的特定表达式吗?_Macros_Rust - Fatal编程技术网

Macros 我可以使用宏替换代码块中的特定表达式吗?

Macros 我可以使用宏替换代码块中的特定表达式吗?,macros,rust,Macros,Rust,我试图编写一组Rust宏,以特殊方式执行某些代码。目前,我是这样写的 macro_rules! macro_stmt{ ([$e:expr]) => { // do something ... } } 并称之为 macro_stmt!([...]); let var = macro_stmt!([...]); macro_stmt!([...]); // etc... 太棒了!基本上,我是以一种特殊的方式在方括号内运行一个表达式(省略号是某些未指定代码的

我试图编写一组Rust宏,以特殊方式执行某些代码。目前,我是这样写的

macro_rules! macro_stmt{
    ([$e:expr]) => {
        // do something ...
    }
}
并称之为

macro_stmt!([...]);
let var = macro_stmt!([...]);
macro_stmt!([...]);
// etc...
太棒了!基本上,我是以一种特殊的方式在方括号内运行一个表达式(省略号是某些未指定代码的占位符),而
macro\u stmt
宏已经非常有效了

我希望能够编写一个宏,以便像运行代码块一样运行它:

macro_rules! macro {
    // some rule to call macro_stmt!
    // this pattern isn't correct, BTW
    ($($line:stmt);+;) => {
        $(macro_stmt($line);)+
    }
}
叫它

macro! {
    [...];
    let var = [...];
    [...];
    // etc...
}
但是编译器对我大喊大叫,因为
stmt
片段的语法不正确,因为“array”的内容不是正确的逗号分隔格式

有没有一种方法可以在不检查语法的情况下逐行调用
macro\u stmt
?没有
let var=
的行将只调用
macro\u stmt()
,但是带有
let
的行将使用相同的
let var=macro\u stmt()
作为前缀

宏的预期第一次扩展是

macro_stmt!([...]);
let var = macro_stmt!([...]);
macro_stmt!([...]);

这可能吗?

我发现很难完全理解你的问题。
[…]
应该是多少文字?
[]
应该是文字,而
..
是表示某些未指定代码的省略号吗?或者你想要三个
字符?你基本上是在问“在这个宏调用中,我想以一种特殊的方式专门处理每一个成对的方括号”?是的,抱歉,省略号是一些未指定的代码。昨天是漫长的一天。我在睡觉前贴的。