类型不匹配的错误:Option<&[u8]>和Option<&[u8;32]>
我在玩 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]>`
回答
切片不仅仅是数组上的指针。它既是指向数据的指针,又是一个长度(参见数组和切片),因为它仅指数组的一部分。这就是类型不兼容的原因。
您在这里想要的是整个数组的切片,您可以使用.. 全范围表达式: slice = &array[..]。
有一个选项,您可以使用map有条件地应用此转换。
结合所有这些:
fn fun_two(x: Option<&Foo>) {
fun_one(x.map(|a| &a[..]))
}
THE END
二维码