Skip to content
เข้าสู่ระบบ

Interior Mutability

หัวข้อนี้คือ “กลโกง” ที่ถูกกฎหมายของ Rust ครับ! Interior Mutability อนุญาตให้เราแก้ข้อมูล ข้างใน ได้ แม้ตัวแปรภายนอกจะเป็น Immutable ก็ตาม

ลองนึกภาพกล่องที่ล็อคไว้จากข้างนอก (immutable) แต่ข้างในมีช่องลับที่เปิดออกได้ (mutable) นั่นแหละครับคือ Interior Mutability พอดี

Cell<T> เป็น wrapper ที่ง่ายที่สุดสำหรับ Interior Mutability โดยใช้กับ Copy types เท่านั้น

// ============================================
// Cell<T> - Interior Mutability สำหรับ Copy types
// ============================================
use std::cell::Cell;
fn main() {
// ============================================
// ประกาศแบบ immutable (ไม่มี mut) แต่...
// ============================================
let x = Cell::new(5);
// ============================================
// เราแก้ค่าข้างในได้ด้วย set()!
// ============================================
x.set(10);
// ============================================
// อ่านค่าด้วย get() - จะ copy ค่าออกมา
// ============================================
println!("Value: {}", x.get()); // 10
// ============================================
// สามารถ set ได้หลายครั้ง
// ============================================
x.set(20);
x.set(30);
println!("Final: {}", x.get()); // 30
}

เข้าสู่ระบบเพื่อดูเนื้อหาเต็ม

ยืนยันตัวตนด้วยบัญชี Google เพื่อปลดล็อกบทความทั้งหมด