Arrays 距离常数数组
如何使用从范围中获取的值生成长常量数组? 奖励:1)不使用任何标准,2)不使用任何板条箱 我想做的是:Arrays 距离常数数组,arrays,rust,constants,compile-time,rust-no-std,Arrays,Rust,Constants,Compile Time,Rust No Std,如何使用从范围中获取的值生成长常量数组? 奖励:1)不使用任何标准,2)不使用任何板条箱 我想做的是: struct A { a: i32, b: B } enum B { One, Two } const AS: [A; 1024] = [A{a: 1, b: B::One}, A{a: 2, b: B::One}, ..., A{a: 1024, b: B::One}] 到目前为止,我得到的最远信息是: macro_rules! generate_lis
struct A {
a: i32,
b: B
}
enum B {
One,
Two
}
const AS: [A; 1024] = [A{a: 1, b: B::One}, A{a: 2, b: B::One}, ..., A{a: 1024, b: B::One}]
到目前为止,我得到的最远信息是:
macro_rules! generate_list {
($($a:expr)+, $variant:expr) => {
[ $( A { a: $a, b: $variant } )* ]
}
}
const AS: [A; 1024] = generate_list!(1..1025i32, B::One);
这似乎至少有一个问题是,在范围表达式扩展为文本列表之前对宏进行了求值。我不确定它是否惯用,但以下可能适用于您的用例:
#[派生(调试、复制、克隆)]
发布结构A{
a:i32,
b:b,
}
#[派生(调试、复制、克隆)]
发布枚举B{
一,,
二,,
}
常量fn gen_数组(偏移量:i32,b:b)->[A;N]{
设mut res=[A{A:offset,b};N];
设muti=0;
而i
我使用了while
循环,因为for
循环当前不允许在const
上下文中使用,如图所示
上述将为偏移量为0的AS
生成42个值:
[
A{
答:0,,
b:一个,
},
A{
答:1,,
b:一个,
},
...
A{
a:41,
b:一个,
},
]
显示它生成的指令与手动写入的指令相同。手动写入、使用build.rs或执行proc宏。我重新打开是因为a)我从未打算复制hammer。b) 我认为在2021年康斯特可能会有更好的答案fn@DenysSéguret您不能在常量fn中使用for循环,所以我认为我们不能使用while循环