簡體   English   中英

為什么將結構傳遞給 Rust 中的 function 將其永久移動到該 function?

[英]Why does passing a struct to a function in Rust permanently move it to that function?

例子:

let mut protagonist = Vec::new(); 
for (_i, _c) in challenger.chars().enumerate() {   
    protagonist.push('_');
}
let s = String::from_iter(protagonist);

protagonist.push('t'); // error: value borrowed here after move

我知道為了解決它,你必須在將它傳遞給from_iter() function 時編寫&protagonist protagonist。 正如通過引用傳遞,而不是值傳遞。 但我的問題是,為什么 object 在您傳遞值時首先會移開,並且您不能再在主 function 中使用它? 這是為了什么目的?

這種行為是 Rust 的所有權和借用核心特性的一部分,這是提供 Rust 的 memory 安全保證的機制。

其目的是確保 memory 管理不需要 GC。 model Rust 使用的是基於所有權的,因此所有對象只能有一個所有者。 現在,基於此,有 3 種使用變量的方法,要么放棄變量的所有權,讓變量不可變地借用,要么可變地借用。 這是為了確保根據需要進行適當的 memory 管理。 如果您知道不會再次使用該變量,則可以轉移其所有權,舊值將被刪除。 如果您知道將使用該變量,則可以借用它(根據您的需要可變或不可變地借用)。 因此,您不會有未使用的變量,它會讓您對 memory 的正確管理變得更加細心,幫助您解決以后可能出現的一些問題。

在您的示例中,您的代碼向編譯器表明您不想再在主 function 中使用該變量,這是語言本身的設計。 請記住,編譯器可以執行 3 種不同的操作(移動、借用和可變借用),因此程序員應該讓編譯器知道他們正在選擇哪個選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM