簡體   English   中英

如何更改由move傳遞的參數?

[英]How can I mutate a parameter that was passed by move?

我的理解是我是否具有以下功能:

fn f(x: Vec<u32>) -> (some result)

f擁有x所有權。 f現在負責x的破壞。

如果是這種情況,我可以將x突變嗎? 要獲得一個可變的x迭代器,需要一個&mut ,我沒有。

我應該能夠突變一個我現在擁有所有權的變量,而不會產生任何不良影響,這似乎是合理的。 調用函數已將x所有權轉讓給f ,因此它不在乎會發生什么。

也許我可以將類型f更改為f(x: &mut Vec<u32>) ,但是由於種種原因,我並不是很想這樣做,例如,它可以防止像f(g(x)) ,並且如果我的“(某些結果)”不是Vec<u32> (例如包含Vec<u32> ),那么我就必須將函數拆分為兩個並確保調用者做他們應該做的事。

您應該將x參數聲明為可變的: mut x: Whatever

fn main() {
    let x = vec![];
    mutate(x);
}

fn mutate(mut x: Vec<u32>) {
    x.push(1);
}

您可以遮蔽x

fn main() {
    let x = vec![];
    mutate(x);
}

fn mutate(x: Vec<u32>) {
    let mut x = x;
    // ...
}

暫無
暫無

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

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