Don*_*d H 6 rust borrow-checker
我是Rust的新手,在借用检查器方面遇到了困难.
consume_byte
来自main
工作的电话就好了.但是,如果我尝试consume_two_bytes
在它们之间添加另一个函数(),它们就会崩溃.
以下代码将无法编译,因为它似乎reader
变量in consume_two_bytes
不可变且无法借用.
添加&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);
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)