【发布时间】:2013-12-09 19:07:40
【问题描述】:
我有以下(足够无辜的)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.read API 从那时起就发生了变化。它不再需要第二个参数了。
【问题讨论】:
-
愿意提供您的完整代码吗?我根据你的代码拼凑了一些东西,但我得到了一个不同的错误。你用的是什么版本的 rust?
-
顺便说一句,
~Path正在为Path分配一个框,此时可以将路径直接放在堆栈上并对其进行正常引用,例如&Path. -
安德鲁,代码用于 rust 0.8。 dbaupp,确实如此。
&Path会更好。
标签: rust