
- Rust 教程
- Rust - 首頁
- Rust - 簡介
- Rust - 環境設定
- Rust - HelloWorld 示例
- Rust - 資料型別
- Rust - 變數
- Rust - 常量
- Rust - 字串
- Rust - 運算子
- Rust - 決策制定
- Rust - 迴圈
- Rust - 函式
- Rust - 元組
- Rust - 陣列
- Rust - 所有權
- Rust - 借用
- Rust - 切片
- Rust - 結構體
- Rust - 列舉
- Rust - 模組
- Rust - 集合
- Rust - 錯誤處理
- Rust - 泛型型別
- Rust - 輸入輸出
- Rust - 檔案輸入/輸出
- Rust - 包管理器
- Rust - 迭代器和閉包
- Rust - 智慧指標
- Rust - 併發
- Rust 有用資源
- Rust - 快速指南
- Rust - 有用資源
- Rust - 討論
Rust - 借用
將變數的所有權傳遞給另一個函式,然後返回所有權非常不方便。Rust 支援一個稱為借用的概念,其中值的擁有權臨時轉移到一個實體,然後返回到原始擁有者實體。
考慮以下情況:
fn main(){ // a list of nos let v = vec![10,20,30]; print_vector(v); println!("{}",v[0]); // this line gives error } fn print_vector(x:Vec<i32>){ println!("Inside print_vector function {:?}",x); }
main 函式呼叫了一個函式 print_vector()。一個向量作為引數傳遞給此函式。向量的所有權也從 main() 傳遞到 print_vector() 函式。當 main() 函式嘗試訪問向量 v 時,上述程式碼將導致如下所示的錯誤。
| print_vector(v); | - value moved here | println!("{}",v[0]); | ^ value used here after move
這是因為一旦所有權轉移到另一個函式,原始擁有函式就不能再使用該變數或值。
什麼是借用?
當一個函式暫時(一段時間)將其對變數/值的控制權轉移到另一個函式時,這稱為借用。這是透過傳遞變數的引用 (& var_name) 而不是將變數/值本身傳遞給函式來實現的。在傳遞控制權的函式完成執行後,變數/值的所有權將轉移回變數的原始所有者。
fn main(){ // a list of nos let v = vec![10,20,30]; print_vector(&v); // passing reference println!("Printing the value from main() v[0]={}",v[0]); } fn print_vector(x:&Vec<i32>){ println!("Inside print_vector function {:?}",x); }
輸出
Inside print_vector function [10, 20, 30] Printing the value from main() v[0] = 10
可變引用
函式可以透過使用對該資源的可變引用來修改借用的資源。可變引用以 &mut 為字首。可變引用只能對可變變數進行操作。
示例:修改整數引用
fn add_one(e: &mut i32) { *e+= 1; } fn main() { let mut i = 3; add_one(&mut i); println!("{}", i); }
main() 函式聲明瞭一個可變整數變數 i,並將 i 的可變引用傳遞給 add_one()。add_one() 將變數 i 的值加 1。
示例:修改字串引用
fn main() { let mut name:String = String::from("TutorialsPoint"); display(&mut name); //pass a mutable reference of name println!("The value of name after modification is:{}",name); } fn display(param_name:&mut String){ println!("param_name value is :{}",param_name); param_name.push_str(" Rocks"); //Modify the actual string,name }
main() 函式將變數 name 的可變引用傳遞給 display() 函式。display 函式將額外的字串追加到原始 name 變數。
輸出
param_name value is :TutorialsPoint The value of name after modification is:TutorialsPoint Rocks
廣告