Rust -不同的数组长度取决于条件

lmvvr0a8  于 2022-12-19  发布在  其他
关注(0)|答案(2)|浏览(190)

一个新手的问题,但我已经把头撞在墙上两个小时了...
我的程序中有两个不同的数组:

const ARRAY_1: [u8; 2] = [0xe8, 0xe3, 0x37, 0x00];
const ARRAY_2: [u8; 4] = [0xe8, 0xe3];

我想写这样的东西:

if condition1 {
    let ARRAY_CHOSEN: [&[u8]; 2] = ARRAY_1;
}

else if condition2 {
    let ARRAY_CHOSEN: [&[u8]; 4] = ARRAY_2;
}

然后在函数的其余部分使用ARRAY_CHOSEN...
但当然它不起作用,因为ARRAY_CHOSEN包含在{}中!
--〉我该怎么做呢?根据条件选择2个元素的数组还是4个元素的数组?
谢谢你们

xn1cxnb4

xn1cxnb41#

根据您以后打算如何使用数组,可以将它们强制转换为切片(键入&[u8]):

const ARRAY_1: [u8; 4] = [0xe8, 0xe3, 0x37, 0x00];
const ARRAY_2: [u8; 2] = [0xe8, 0xe3];

fn main() {
    let condition1 = false;
    let condition2 = true;
    
    let arr_chosen = if condition1 {
        &ARRAY_1[..]
    } else if condition2 {
        &ARRAY_2[..]
    } else {
        &[]
    };
    
    dbg!(arr_chosen);
}
[src/main.rs:16] arr_chosen = [
    232,
    227,
]
irlmq6kh

irlmq6kh2#

一般来说,这在Rust代码中不是一个可行的模式,你可以使用const泛型,但是如果你是一个初学者,我建议你不要使用const泛型,因为它们只适合特定的用例。
只需使用一个Vec,它可以是任意大小,沿着将if条件作为表达式:

let chosen = if condition1 {
    vec![1, 2, 3]
} else if condition2 {
    vec![1, 2, 3, 4, 5, 6]
} else {
    // you have to provide some default here to cover
    // the case where both condition1 and condition2 are false
    // or you can panic but that is inadvisable
    vec![1, 2, 3]
}

相关问题