![](/img/trans.png)
[英]How do I create a string array that can be passed as parameter in Rust?
[英]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.