- 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
廣告