从u8切片创建Read trait对象

Mik*_*kov 0 slice rust trait-objects

我正在尝试Readu8切片创建一个特征对象,以便在murmur3包中使用,就像这样

fn main() {
    let mut arr: [u8; 4] = [1, 2, 3, 4];
    let mut slice: &mut [u8] = &mut arr;
    let mut read: &mut std::io::Read = &mut slice;
}
Run Code Online (Sandbox Code Playgroud)

但我明白了

<anon>:4:42: 4:53 error: the trait `std::io::Read` is not implemented for the type `[u8]` [E0277]
<anon>:4     let mut read : & mut std::io::Read = & mut slice;
                                                  ^~~~~~~~~~~
<anon>:4:42: 4:53 help: see the detailed explanation for E0277
<anon>:4:42: 4:53 help: the following implementations were found:
<anon>:4:42: 4:53 help:   <&'a [u8] as std::io::Read>
<anon>:4:42: 4:53 note: required for the cast to the object type `std::io::Read`
error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)

这段代码出了什么问题?

oli*_*obk 6

正如错误消息告诉您的那样,有一个Readimpl &[u8].没有理由让你有一个Readimpl &mut[u8],所以你可以删除mut代码中的一些:

// no need for `mut arr`, because `Read` does not modify memory
let arr: [u8; 4] = [1, 2, 3, 4];
// `slice` needs to be `mut`, because `Read` will
// actually make the slice smaller with every step
let mut slice: &[u8] = &arr;
let mut read: &mut std::io::Read = &mut slice;
Run Code Online (Sandbox Code Playgroud)