Tôi đã sau (đủ ngây thơ) mã Rust:không thể mượn foo là bất biến vì nó cũng được vay mượn như có thể thay đổi
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)
}
Các rustc
phàn nàn rằng
không thể mượn
buf[]
như bất biến vì nó là cũng được mượn là có thể thay đổi
Nếu thay đổi dòng tương ứng thành:
Ok(reader) => reader.read(buf, 12),
tất cả sẽ chỉ hoạt động tốt. Nhưng nó là ít thỏa đáng kể từ bây giờ chiều dài của bộ đệm được nhân đôi trong mã. Mặc dù mơ hồ hiểu tại sao rustc
phàn nàn, tôi vẫn muốn tranh luận rằng rustc
sẽ có thể suy ra rằng len()
là một hàm thuần túy và không có tác dụng phụ sao cho mã đó hợp lệ. Bên cạnh đó, nó là một patten khá phổ biến để đọc vào một bộ đệm theo cách đó.
Vì vậy, cách thức mộc mạc của Rust là gì?
EDIT: Mã dành cho Rust 0.8. Như @pnkfelix đã chỉ ra, API Reader.read
đã được thay đổi kể từ đó. Nó không cần tham số thứ hai nữa.
Chăm sóc để cung cấp mã hoàn chỉnh của bạn? Tôi cobbled với nhau một cái gì đó dựa trên mã của bạn nhưng tôi nhận được một lỗi khác nhau. Bạn đang sử dụng phiên bản gỉ nào? – asm
BTW, đường dẫn '~' đang phân bổ một hộp cho 'Đường dẫn', khi một người có thể đặt Đường dẫn thẳng vào ngăn xếp và lấy một tham chiếu bình thường cho nó, ví dụ: '& Đường dẫn'. – huon
Andrew, mã đã bị rỉ sét 0.8. dbaupp, đúng vậy. '& Path' sẽ tốt hơn. – edwardw