Các gỉ bằng ví dụ hướng dẫn cho thấy đoạn mã sau here cho một loạt fibonacci với lặp:mem :: thay thế trong Rust
fn next(&mut self) -> Option<u32> {
let new_next = self.curr + self.next;
let new_curr = mem::replace(&mut self.next, new_next);
// 'Some' is always returned, this is an infinite value generator
Some(mem::replace(&mut self.curr, new_curr))
}
Tôi muốn hiểu được những lợi thế của việc này là gì, so với trực quan nhất (nếu bạn đến từ các ngôn ngữ khác):
fn next(&mut self) -> Option<u32> {
let tmp = self.next;
self.next = self.curr + self.next;
self.curr = tmp;
Some(self.curr)
}
Cảm ơn câu trả lời. Nó rất rõ ràng. Tôi phải nói rằng mặc dù tôi đã theo dõi hầu hết các hướng dẫn viên Rust, nhưng tôi vẫn chưa rõ về những thứ nhất định. Nói cách khác, tôi có thể đọc/thay đổi một chương trình nhưng tôi không chắc mình sẽ đưa ra quyết định đúng nếu tôi phải làm nó từ đầu. Bạn có thể đề xuất một số hướng dẫn khác cho việc này không. – Hernan
@Hernan, có [Rust by Example] (http://rustbyexample.com/) nhưng tôi không chắc đó có phải là những gì bạn đang tìm kiếm hay không. Để "đưa ra quyết định đúng", các lỗi biên dịch về mặt lý thuyết hướng dẫn bạn đúng hướng, có một số nguyên tắc chung như "không thể di chuyển ra khỏi ..." gợi ý sử dụng tham chiếu hoặc sử dụng hàm như 'replace' hoặc' swap', " không thể mượn ... "gợi ý sử dụng nhiều' {} 'phạm vi. (Với thực hành bạn có thể dự đoán khi trình biên dịch phàn nàn và sử dụng sửa chữa ngay lập tức, nhưng hộp thoại nội bộ của tôi vẫn là bản chất "trình biên dịch sẽ phàn nàn về điều này".) – huon
Tôi nên nói "quyết định đúng" trong thiết kế. Tôi sẽ tiếp tục đọc và viết mã. – Hernan