gpt4 book ai didi

rust - 类型不匹配的错误 : Option<&[u8]> and Option<&[u8;32]>

转载 作者:行者123 更新时间:2023-12-02 02:16:01 25 4
gpt4 key购买 nike

我正在使用 Rust 代码,但我遇到了转换 Option<&[u8; 32]> 的问题。至Option<&[u8]> .

一个(非常)简化的示例:

pub type Foo = [u8; 32];

fn fun_one(inp: Option<&[u8]>) {
println!("{:?}", inp);
}

fn fun_two(x: Option<&Foo>) {
fun_one(x)
}

fn main() {
let x = [11u8; 32];
fun_two(Some(&x));
}

链接:Rust Playground

error[E0308]: mismatched types
--> src/main.rs:8:13
|
8 | fun_one(x)
| ^ expected slice `[u8]`, found array `[u8; 32]`
|
= note: expected enum `Option<&[u8]>`
found enum `Option<&[u8; 32]>`

最佳答案

切片不仅仅是数组上的指针。它既是指向数据的指针,又是长度(请参阅 Arrays and Slices ),因为它仅引用数组的一部分。这就是类型不兼容的原因。

这里您想要的是整个数组的切片,您可以使用 .. full range expression 获得它。 : slice = &array[..].

有了一个选项,您可以有条件地使用 map 应用此转换。 .

结合所有这些:

fn fun_two(x: Option<&Foo>) {
fun_one(x.map(|a| &a[..]))
}

关于rust - 类型不匹配的错误 : Option<&[u8]> and Option<&[u8;32]>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67167983/

25 4 0