я следующий (достаточно невинный) Ржавчина Код:не может занимать Foo, как неизменны, потому что он также заимствованы, как изменяемый
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()
является чистой функцией и не имеет побочного эффекта, поэтому код действителен. Кроме того, довольно распространенный паттен, чтобы читать в буфер таким образом.
Так что же такое идиоматический путь ржавчины?
EDIT: Код был для Rust 0.8. Как отметил @pnkfelix, с тех пор был изменен API Reader.read
. Второй параметр больше не нужен.
Забота о предоставлении полного кода? Я объединил что-то, основанное на вашем коде, но у меня другая ошибка. Какую версию ржавчины вы используете? – asm
BTW, '~ Path' выделяет поле для' Path', когда можно просто поместить Path прямо в стек и принять нормальную ссылку на него, например. '& Path'. – huon
Андрей, код был для ржавчины 0.8. дбаупп, да. '& Path' было бы лучше. – edwardw