gpt4 book ai didi

rust - 映射到没有克隆的载体上

转载 作者:行者123 更新时间:2023-11-29 08:03:34 26 4
gpt4 key购买 nike

我正在尝试编写一个具有此签名的函数,而不使用 clone()或分配一个新向量:

fn mapVec(f: Fn(T) -> T, x: Vec<T>) -> Vec<T>

在我看来,这似乎是可行的。对于 x 中的每个元素,我们将其传递给f ,与 f取得它的所有权。然后我们产生一个返回值,然后为 f已取得该传递值的所有权,如有必要,它会销毁它。然后我们将返回值放回到向量中。因为我们已经取得了 x 的所有权,我们可以修改它,然后我们可以将它返回给调用者。

我的尝试如下:

for e in x.iter_mut() {
*e = f(e);
}
return x;

但不幸的是f预计 T ,不是&mut T

我不想更改 mapVec 的签名例如,使用可变函数,如果可能的话,我希望它从外部看起来像一个纯函数,只需利用内部的突变,因为我们可以逃脱它,因为调用者已将对象的所有权传递给我们。

最佳答案

您实际上遇到了问题 replace_withtake_mut crates正在努力解决。只需将其中一个 crate 的使用放入 for 循环即可解决您的问题。

但请注意注意事项。如果 map 回调发生 panic ,就会发生不好的事情。这是因为您想要做的是将对象移出其位置,调用函数,然后将结果放回该位置。但是,如果该函数没有产生结果,即出现 panic ,那么您在空位置中放入什么?

关于rust - 映射到没有克隆的载体上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56421645/

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