Rust无法识别切片

时间:2019-07-13 04:03:35

标签: rust

我有一个要打印的[u8; 128]。为此,我正在使用调试格式将该缓冲区的借用传递给println!。但是,我收到一个编译器错误。

编译器说[u8;128]没有实现std::fmt::Debug。但是,我要向println!借用,这使我提出疑问,为什么Rust无法识别出这是一个切片。通过将[#derive(Debug)]附加到具有一个成员buf: &[u8]的结构,我得以解决此问题。将我的缓冲区通过该结构传递到println!就解决了问题,这告诉我&[u8]确实实现了std::fmt::Debug

use std::io::prelude::*;
use std::net::TcpStream;

#[derive(Debug)]
struct Fah<'a> {
    buf: &'a[u8],
}

fn main() -> std::io::Result<()> {
    let mut stream = TcpStream::connect("216.58.194.206:80")?;

    stream.write(&[1])?;
    let mut buf = [0; 128];
    stream.read(&mut buf)?;
    println!("buf: {:?}", &buf); // This line does not compile
    println!("fah: {:?}", Fah { buf: &buf}); // This line works fine
    Ok(())
}


游乐场链接:https://play.integer32.com/?version=stable&mode=debug&edition=2018&gist=b95ad4762f23ca35e890d0cbd2c072ce

我希望这可以编译。但是,编译器抱怨the trait std::fmt::Debug is not implemented for [u8; 128],如我之前所说。

1 个答案:

答案 0 :(得分:4)

btn.press(); btn.release(); 是一个&buf,在很多时候都被隐式强制(由unsizing强制为&[u8; 128]。如果您明确想要切片,请it’ll work

&[u8]

但首先也要切片:

println!("{:?}", &a as &[u8]);