我有一個結構類似這樣的一些分析論證工作修改:結構更新語法不借來的數據
fn parse(parsed: &Args, start: usize, args: Vec<String>) -> Args {
if start >= args.len() {
return parsed.clone();
}
if args[start] == "--version" {
return parse(&Args { version: true, ..parsed.clone() }, start + 1, args);
}
if args[start] == "--help" {
return parse(&Args { help: true, ..parsed.clone() }, start + 1, args);
}
return Args { files: args[start..args.len()].to_vec(), ..parsed.clone() };
}
我使用的功能是這樣的:
fn main() {
let args = std::env::args().collect::<Vec<String>>();
let parsed = parse(&Args::default(), 1, args);
}
此代碼工作原理,但我想鍵入:
return parse(&Args { version: true, ..parsed }, start + 1, args);
代替:
return parse(&Args { version: true, ..parsed.clone() }, start + 1, args);
避免克隆過程中的過度複製數據。當我剛刪除.clone()
它表示Args
類型的預期,但它取而代之&Args
。
當我提領與*parsed
編譯器說:「不能搬出借來的內容的」
你是否考慮過不通過引用傳遞'parsed'參數? – loganfsmyth
@loganfsmyth是的,這就是我最終的結局。不克隆的速度增益大約是7%。 – konmik