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

Cell - Interior Mutability

std::cell มี types สำหรับแก้ไขข้อมูลผ่าน shared reference! เป็น pattern ที่สำคัญเมื่อต้องการ mutability ในบางจุด

ปกติ Rust ไม่ให้แก้ไขผ่าน &T (shared reference) แต่ Cell types ทำได้:

Typeใช้เมื่อThread-safe
Cell<T>T เป็น CopyNo
RefCell<T>ต้อง borrow runtimeNo
OnceCell<T>Set ครั้งเดียวNo
Mutex<T> / RwLock<T>ข้าม threadsYes
use std::cell::Cell;
fn main() {
// ============================================
// ทำไมต้อง Interior Mutability?
// ============================================
// ปกติ: &T ไม่ให้แก้ไข
let x = 5;
let r = &x;
// *r = 10; // Error! can't mutate through &T
// Cell: แก้ไขผ่าน shared reference ได้
let cell = Cell::new(5);
let r1 = &cell;
let r2 = &cell;
r1.set(10); // OK! แก้ไขได้
r2.set(20); // OK! แก้ไขได้
println!("cell: {}", cell.get());
}

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

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