我在玩 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));
}
Run Code Online (Sandbox Code Playgroud)
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]>`
Run Code Online (Sandbox Code Playgroud)
切片不仅仅是数组上的指针。它既是指向数据的指针,又是一个长度(参见数组和切片),因为它仅指数组的一部分。这就是类型不兼容的原因。
您在这里想要的是整个数组的切片,您可以使用.. 全范围表达式: slice = &array[..]。
有一个选项,您可以使用map有条件地应用此转换。
结合所有这些:
fn fun_two(x: Option<&Foo>) {
fun_one(x.map(|a| &a[..]))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |