DEV Community

loading...

Borrowing in Rust

Pallat Anchaleechamaikorn
Thai gopher
・1 min read

เรื่องการยืมหรือ Borrow ใน Rust ที่จริงไม่มีอะไรซับซ้อน หลักๆแล้วเป็นการป้องกันเรื่อง data-race โดยจะให้มีความเป็นเจ้าของ ในช่วงเวลาใดเวลาหนึ่งนั้น มีได้เพียงตัวแปรเดียว ยกตัวอย่างง่ายๆ

fn main() {
    let mut section = 111;
    let law = &mut section;

    println!("value is {}",section);
    println!("references is {}",law);
}
Enter fullscreen mode Exit fullscreen mode

เราประกาศตัวแปร 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);
}
Enter fullscreen mode Exit fullscreen mode

แค่นี้ก็รันผ่านแล้ว เพราะว่าเราใช้ law ก่อน พอจบบรรทัดนั้น law ก็จะโดน drop ไป และความเป็นเจ้าของจะกลับมาเป็นของ section

อันนี้ยกตัวอย่างง่ายๆให้ดู ส่วนที่ยากไปอ่านต่อที่ https://tourofrust.com/chapter_5_th.html

Discussion (0)