Traits dan generics tanpa drama
Perilaku bersama di Rust: traits, trait bound, dan kapan memakai generics.
Daftar Isi
Rust tidak punya inheritance, jadi perilaku bersama datang dari trait. Anggap trait sebagai kontrak: tipe apa pun yang menandatanganinya wajib menyediakan method ini.
Mendefinisikan dan mengimplementasikan
trait Summary {
fn summarize(&self) -> String;
}
struct Release {
product: String,
version: String,
}
impl Summary for Release {
fn summarize(&self) -> String {
format!("{} {}", self.product, self.version)
}
}
Memakainya secara generik
Trait bound berkata “semua T yang memenuhi kontrak”:
fn announce(item: &impl Summary) {
println!("Update! {}", item.summarize());
}
Memilih di antaranya
impl Traitdi posisi argumen: cepat, mudah dibaca, biasanya cukup<T: Summary>eksplisit: perlu saat Anda menyebutTlebih dari sekali- Trait object (
dyn Summary): satu koleksi berisi tipe campuran, biaya runtime kecil
Dikombinasikan dengan ownership dari bagian 1, traits dan generics mencakup sebagian besar arsitektur yang akan Anda tulis di Rust sehari-hari.