【发布时间】:2022-11-02 23:31:26
【问题描述】:
给定以下功能:
fn some_function<K, F: Fn(K) -> K>(f: F, vs: Vec<K>) -> Vec<K> {
let mut index = 0;
let new_vec = vs.iter().map(|x| {
index += 1;
for _ in 1 .. index {
x = f(x); // <- error here: mismatched types expected reference `&K` found type parameter `K`
}
*x
}).collect();
new_vec
}
我怎样才能让它工作?
【问题讨论】:
-
您真的打算将函数
index - 1应用于每个元素吗? -
如果您只使用 x 重新计算的最后一个值,我不明白迭代超过 1..index 的目标。
-
是的,我必须将函数 i 次应用于
i-th元素 -
[x, x, x] => [x, f(x), f(f(x))]
-
@Ali:在这种情况下,我相信你有一个错误。
1..index迭代index - 1次,而index是基于 0 的,因此您在索引 0 和 1 处有 0 次迭代,在索引 2 处有 1 次迭代,在索引 3 处有 2 次迭代,等等...您应该使用 @987654327 @ 反而。
标签: rust