6

我是 Rust 的新手,在借用检查器方面遇到了困难。

consume_byte从工作中调用main就好了。但是,如果我尝试consume_two_bytes在两者之间添加另一个函数 ( ),它就会崩溃。

以下代码将无法编译,因为看起来reader变量 inconsume_two_bytes是不可变的并且不能被借用。

在函数签名中添加 a&mut只会更改编译器错误。

use std::io::Read;
use std::net::TcpListener;

fn consume_byte<R>(reader: R) where R: Read {
    let mut buffer = vec![];
    reader.take(1).read_to_end(&mut buffer).unwrap();
}

fn consume_two_bytes<R>(reader: R) where R: Read {
    consume_byte(&mut reader);
    consume_byte(&mut reader);
}

fn main() {
    let listener = TcpListener::bind("127.0.0.1:8080").unwrap();
    let (mut stream, _) = listener.accept().unwrap();

    consume_byte(&mut stream);
    consume_byte(&mut stream);

    consume_two_bytes(&mut stream);
}
4

1 回答 1

8

reader必须是可变的consume_two_bytes

fn consume_two_bytes<R>(mut reader: R) where R: Read { // note the mut
    consume_byte(&mut reader);
    consume_byte(&mut reader);
}
于 2015-07-25T20:58:42.100 回答