如何在Rust中通过宏生成const数组?

fdbelqdn  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(102)

我想生成这个const数组:

const EXPS: [i64; 9] = [1,
    10_i64.pow(1), 10_i64.pow(2), 10_i64.pow(3), 10_i64.pow(4),
    10_i64.pow(5), 10_i64.pow(6), 10_i64.pow(7), 10_i64.pow(8)]

宏:

define_exps!(9);

其中参数9指定数组的长度。
我可以用macro做这个吗?

70gysomp

70gysomp1#

是的。你可以把它作为一个过程性宏,也可以使用dtolnay's seq-macro作为一个声明性宏:

macro_rules! define_exps {
    ( $num:literal ) => {
        const EXPS: [i64; $num] = ::seq_macro::seq!(N in 0..$num {
            [
                #(
                    10_i64.pow(N),
                )*
            ]
        });
    };
}

相关问题