Lifetime dalam Struct
Medan yang dipinjam
Lifetime dalam Struct ialah pelajaran Belajar Pengaturcaraan Rust percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Belajar Pengaturcaraan Rust, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Belajar Pengaturcaraan Rust merangkumi sejumlah 4 pelajaran.
Struktur Boleh Meminjam
Kebanyakan struktur memiliki datanya sendiri. Namun, struktur juga boleh menyimpan rujukan kepada data yang tidak dimilikinya. Apabila berbuat demikian, struktur memerlukan parameter jangka hayat.
Ini menjamin bahawa struktur tidak pernah hidup lebih lama daripada data yang dipinjam.
Mengisytiharkan Jangka Hayat pada Struktur
Tambahkan jangka hayat dalam kurungan sudut selepas nama struktur, kemudian gunakannya pada medan rujukan. Ini menyatakan bahawa struktur tidak boleh hidup lebih lama daripada rujukan tersebut.
struct Excerpt<'a> {
text: &'a str,
}
fn main() {
let novel = String::from("Call me Ishmael. Some years ago...");
let first = novel.split('.').next().unwrap();
let e = Excerpt { text: first };
println!("{}", e.text);
}Kekangan yang Ditambah
Anotasi ini bermaksud satu tika Excerpt hanya sah selagi rentetan yang dipinjamnya masih hidup. Pengompil menguatkuasakan perkara ini di semua tempat struktur itu digunakan.
Kaedah pada Struktur yang Meminjam
Kaedah pada struktur sedemikian turut membawa jangka hayat dalam pengepala impl. Selalunya anda boleh meninggalkan jangka hayat dalam badan kaedah berkat pengguguran (yang akan dibincangkan dalam pelajaran seterusnya).
struct Excerpt<'a> { text: &'a str }
impl<'a> Excerpt<'a> {
fn announce(&self) -> &str {
println!("Attention!");
self.text
}
}
fn main() {
let s = String::from("hello world");
let e = Excerpt { text: &s };
println!("{}", e.announce());
}Mengapa Tidak Memiliki Data Sahaja?
Memiliki data (menggunakan String) adalah lebih mudah dan biasanya lebih digemari. Peminjaman mengelakkan penyalinan data besar dan berguna untuk penghurai serta paparan yang melihat ke dalam penimbal sedia ada.
Gunakan jangka hayat dalam struktur hanya apabila peminjaman benar-benar memberikan manfaat.
Contoh Paparan Penghurai
Struktur yang menyimpan hirisan ke dalam rentetan sumber ialah kegunaan klasik. Struktur itu membaca penimbal asal tanpa menyalinnya.
struct Token<'a> {
word: &'a str,
}
fn main() {
let line = String::from("let x = 5");
let tokens: Vec<Token> = line.split_whitespace().map(|w| Token { word: w }).collect();
for t in &tokens {
println!("token: {}", t.word);
}
}Medan Rujukan Berbilang
Satu struktur boleh menyimpan beberapa rujukan. Rujukan tersebut boleh berkongsi satu jangka hayat atau menggunakan jangka hayat yang berbeza, bergantung pada hubungan kesahihannya.
struct Pair<'a> {
left: &'a str,
right: &'a str,
}
fn main() {
let a = String::from("foo");
let b = String::from("bar");
let p = Pair { left: &a, right: &b };
println!("{} {}", p.left, p.right);
}Ralat Struktur Tergantung
Jika data yang dipinjam digugurkan ketika struktur masih wujud, pengompil akan menolaknya. Parameter jangka hayatlah yang membolehkan pemeriksaan ini dilakukan.
Memulangkan Struktur yang Meminjam
Fungsi yang membina struktur sedemikian mengikat jangka hayat struktur kepada inputnya. Struktur itu tidak boleh hidup lebih lama daripada data yang dihantar masuk.
struct Wrap<'a> { inner: &'a str }
fn wrap<'a>(s: &'a str) -> Wrap<'a> {
Wrap { inner: s }
}
fn main() {
let text = String::from("wrapped");
let w = wrap(&text);
println!("{}", w.inner);
}Pertukaran Memiliki berbanding Meminjam
Panduan ringkas:
- Perlu menyimpan data secara berasingan? Milikinya (
String,Vec). - Perlu paparan jangka pendek ke dalam data sedia ada? Pinjamnya dengan jangka hayat.
Model Mental
Struktur dengan 'a ibarat nota lekat yang dilekatkan pada buku nota orang lain: nota itu hanya bermakna selagi buku nota tersebut masih wujud. Rust memastikan anda tidak pernah membaca nota pada buku nota yang sudah tiada.
Semakan Ringkas
Uji pemahaman anda tentang jangka hayat dalam struktur.
Imbas Kembali
Anda telah mempelajari jangka hayat dalam struktur:
- Struktur yang menyimpan rujukan memerlukan parameter jangka hayat
- Jangka hayat mengikat kesahihan struktur kepada data yang dipinjam
- Kaedah membawa jangka hayat dalam pengepala
impl - Utamakan pemilikan kecuali peminjaman mengelakkan penyalinan yang bermakna
Pelajari Rust dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 39
- Pelajaran
- 144
Soalan Lazim
Adakah pelajaran “Lifetime dalam Struct” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Belajar Pengaturcaraan Rust, termasuk “Lifetime dalam Struct”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Belajar Pengaturcaraan Rust merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Lifetime dalam Struct”?
Medan yang dipinjam Anda berlatih Belajar Pengaturcaraan Rust menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Belajar Pengaturcaraan Rust?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Belajar Pengaturcaraan Rust di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Lifetime dalam Struct” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Belajar Pengaturcaraan Rust ini?
Ya. Setiap pelajaran Belajar Pengaturcaraan Rust menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mengapa Lifetime
- Anotasi Lifetime
- Lifetime dalam Struct
- Peraturan Elisi