gpt4 book ai didi

rust - 除了 Rust 迭代器中的最后一项之外,如何重复克隆操作?

转载 作者:行者123 更新时间:2023-12-04 11:54:48 26 4
gpt4 key购买 nike

我经常看到我需要遍历一个范围并调用一个拥有其参数所有权的函数的模式。由于该函数拥有其参数的所有权,因此我必须克隆该值。例如:

let a = "hello".to_string();
for i in 0..10 {
print_me(a.clone());
}

fn print_me(s: String) {
println!("{}", s);
}
我想找到一种模式,在该模式中,除了最后一个调用之外,所有调用的值都被克隆,以防止冗余克隆。
最简单的方法是对循环索引添加显式检查:
for i in 0..10 {
if i == 9 {
print_me(a);
} else {
print_me(a.clone());
}
}
但是编译器无法理解模式并提示迭代期间移动的值。
我还尝试构建一个迭代器来执行克隆并使用 repeat_with() 移动。 , chain()once()但闭包的值(value)是:
let iter = std::iter::repeat_with(|| a.clone())
.take(9)
.chain(std::iter::once(a))
实现这种模式的最简单方法是什么?
谢谢!

最佳答案

作为替代解决方案,您可以通过跳出循环使编译器了解它实际上是最后一次迭代:

for i in 0..10 {
if i == 9 {
print_me(a);
break;
} else {
print_me(a.clone());
}
}

关于rust - 除了 Rust 迭代器中的最后一项之外,如何重复克隆操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68330481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com