类型不匹配的错误: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[..]))
}


以上是类型不匹配的错误:Option&lt;&amp;[u8]&gt;和Option&lt;&amp;[u8;32]&gt;的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>