我有以下(无辜)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从那时起就发生了变化.它不再需要第二个参数.