gpt4 book ai didi

rust - 将引用分配给不同大小的数组

转载 作者:行者123 更新时间:2023-12-03 11:41:50 24 4
gpt4 key购买 nike

我有一个函数,该函数根据 bool 值设置为true或false来选择另一个数组,类似于以下内容:

const V1: [u8; 2] = [1,2];
const V2: [u8; 4] = [1,2,3,4];

fn test(b: bool) {
let v = if b { &V1 } else { &V2 };
}

fn main() {
test(false);
}
但是我收到以下错误:
error[E0308]: `if` and `else` have incompatible types
--> src/main.rs:5:33
|
5 | let v = if b { &V1 } else { &V2 };
| --- ^^^ expected an array with a fixed size of 2 elements, found one with 4 elements
| |
| expected because of this
|
= note: expected type `&[u8; 2]`
found reference `&[u8; 4]`
我尝试将常量存储为向量,但是 to_vec不能用于常量。
另一种选择是将数组复制到 test内的向量中,但我宁愿不必每次都进行复制。
有没有一种方法可以在每次调用函数时都无需复制数组?

最佳答案

答案是使用切片,但是不幸的是, rust 类型推断还不足以实现这一点。如果将v的类型显式注释为&[u8],则所有内容均应编译。

const V1: [u8; 2] = [1,2];
const V2: [u8; 4] = [1,2,3,4];

fn test(b: bool) {
let v: &[u8] = if b { &V1 } else { &V2 };
}

fn main() {
test(false);
}

关于rust - 将引用分配给不同大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62740630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com