2015-10-21 193 views
4

我試圖測試一些需要讀取器的代碼。我有一個功能:獲取字節數組的讀取器

fn next_byte<R: Read>(reader: &mut R) -> ... 

我怎樣才能測試它的一些字節數組?該文件說,有一個impl<'a> Read for &'a [u8],這將意味着這應該工作:

next_byte(&mut ([0x00u8, 0x00][..])) 

但不同意編譯:

the trait `std::io::Read` is not implemented for the type `[u8]` 

爲什麼?我明確表示&mut

使用防鏽1.2.0

回答

5

您正在試圖調用next_byte::<[u8]>,但[u8]沒有實現Read[u8]&'a [u8]不是同一類型! [u8]是未分類的數組類型,&'a [u8]是分片。

當您在切片上使用Read實現時,它需要對切片進行變異,以便下一次讀取從前一次讀取結束時恢復。因此,您需要將可變借入傳遞給切片。

這裏有一個簡單的工作示例:

use std::io::Read; 

fn next_byte<R: Read>(reader: &mut R) { 
    let mut b = [0]; 
    reader.read(&mut b); 
    println!("{} ", b[0]); 
} 

fn main() { 
    let mut v = &[1u8, 2, 3] as &[u8]; 
    next_byte(&mut v); 
    next_byte(&mut v); 
    next_byte(&mut v); 
}