不能借用foo作为不可变因为它也被借用为可变的

 Aero-Maxwell 发布于 2023-02-11 20:32

我有以下(无辜)Rust代码:

let file = &Path(some_file_name);
let mut buf = [0u8, ..12];
match io::file_reader(file) {
    Ok(reader) => reader.read(buf, buf.len()),
    Err(msg) => println(msg)
}

rustc抱怨

不能借用buf[]不可变的因为它也被借用为可变的

如果将相应的行更改为:

Ok(reader) => reader.read(buf, 12),

一切都会好起来的.但它不太令人满意,因为现在缓冲区的长度在代码中重复.虽然模糊地理解为什么rustc抱怨,但我仍然认为rustc应该能够推断出这len()是一个纯粹的函数并且没有副作用,所以代码是有效的.此外,以这种方式读取缓冲区是一种非常常见的模式.

那么这里惯用的Rust方式是什么?

编辑:代码是为Rust 0.8.正如@pnkfelix指出的那样,Reader.readAPI从那时起就发生了变化.它不再需要第二个参数.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有