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

Newtype Pattern

Newtype pattern ใน Rust ใช้สำหรับ type safety, abstraction และ implementing traits บน external types

Newtype คือ tuple struct ที่มี single field ให้ type ใหม่ที่แยกจาก underlying type

// Newtype = tuple struct with single field
struct Meters(f64);
struct Kilometers(f64);
struct Miles(f64);
impl Meters {
fn new(value: f64) -> Self {
Meters(value)
}
fn value(&self) -> f64 {
self.0
}
}
// Conversion traits
impl From<Kilometers> for Meters {
fn from(km: Kilometers) -> Self {
Meters(km.0 * 1000.0)
}
}
impl From<Miles> for Meters {
fn from(mi: Miles) -> Self {
Meters(mi.0 * 1609.344)
}
}
fn main() {
let m = Meters::new(1000.0);
let km = Kilometers(5.0);
let mi = Miles(3.0);
println!("{} meters", m.value());
println!("{} km = {} meters", km.0, Meters::from(km).value());
println!("{} miles = {} meters", mi.0, Meters::from(mi).value());
// Type safety: can't mix types
// let total = m + km; // Compile error!
}

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

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