เรื่องการยืมหรือ Borrow ใน Rust ที่จริงไม่มีอะไรซับซ้อน หลักๆแล้วเป็นการป้องกันเรื่อง data-race โดยจะให้มีความเป็นเจ้าของ ในช่วงเวลาใดเวลาหนึ่งนั้น มีได้เพียงตัวแปรเดียว ยกตัวอย่างง่ายๆ
fn main() {
let mut section = 111;
let law = &mut section;
println!("value is {}",section);
println!("references is {}",law);
}
เราประกาศตัวแปร section มีค่าเป็น 111 โดยเป็นตัวแปรแบบที่เปลี่ยนค่าได้ เพราะใส่ mut
ไว้ด้วย และประกาศตัวแปร law ให้ชี้ไปที่ address ของตัวแปร section อีกที โดยให้ชี้แบบเปลี่ยนค่าได้ด้วย
เขียนง่ายๆแบบนี้ แต่จะ compile ไม่ผ่าน เพราะว่า
law ได้ทำการยืมความเป็นเจ้าของ มาจาก section และ law ยังคงอยู่ พอเราสั่ง println ง่ายๆเลย มันจะ error
ทีนี้ทดลอง สลับบรรทัดเป็นแบบนี้ดู
fn main() {
let section = 111;
let law = section;
println!("references is {}",law);
println!("value is {}",section);
}
แค่นี้ก็รันผ่านแล้ว เพราะว่าเราใช้ law ก่อน พอจบบรรทัดนั้น law ก็จะโดน drop ไป และความเป็นเจ้าของจะกลับมาเป็นของ section
อันนี้ยกตัวอย่างง่ายๆให้ดู ส่วนที่ยากไปอ่านต่อที่ https://tourofrust.com/chapter_5_th.html
Top comments (0)