Macros 在Rust中声明变量的宏?

Macros 在Rust中声明变量的宏?,macros,rust,Macros,Rust,在C语言中,可以编写声明变量的宏,如下所示: #define VARS(a, b, c) \ int a, b, c; 当然,这不是你通常想要做的事情 在实际的例子中,我希望开始工作,但它并不那么简单 #define VARS(data, stride, a, b, c) \ MyStruct *a = &data.array[0], \ MyStruct *b = &data.array[1 * (stride)], \

在C语言中,可以编写声明变量的宏,如下所示:

#define VARS(a, b, c) \
    int a, b, c;
当然,这不是你通常想要做的事情

在实际的例子中,我希望开始工作,但它并不那么简单

#define VARS(data, stride, a, b, c) \
    MyStruct *a = &data.array[0],            \
    MyStruct *b = &data.array[1 * (stride)], \
    MyStruct *c = &data.array[2 * (stride)];
然而,就这个问题而言,任务的具体细节并不重要

可以在Rust中编写这样的宏吗?
如果是这样,这将如何写入?

可以在Rust中写入这样的宏:

macro_rules! vars {
    ($data:expr, $stride:expr, $var1:ident, $var2:ident, $var3:ident) => {
        let $var1 = $data[0];
        let $var2 = $data[1 * $stride];
        let $var3 = $data[2 * $stride];
    };
}

fn main() {
    let array = [1, 2, 3, 4, 5];
    let stride = 2;
    vars!(array, stride, a, b, c);
    println!("{}", a);
    println!("{}", b);
    println!("{}", c);
}

有关更多信息,请阅读。

新书中的宏一章。