Function 无法通过泛型元素上的迭代器生成泛型类型

Function 无法通过泛型元素上的迭代器生成泛型类型,function,generics,rust,iterator,traits,Function,Generics,Rust,Iterator,Traits,我需要一个函数,它可以接受一些参数,每个参数都是泛型类型,并且能够对单个参数应用操作 我当前的不工作测试尝试: pub fn gen_测试(f:fn(I)->f32)->f32 哪里 I:IntoIterator+默认值, ::项目:添加 { 让start=I::default(); 让我们加上一个:I=start.into_iter().map(|p | p+p).collect(); let值:f32=f(加上1); 返回值; } 按照I的思路思考,某个结构包含可能不同类型的多个值,并在这

我需要一个函数,它可以接受一些参数,每个参数都是泛型类型,并且能够对单个参数应用操作

我当前的不工作测试尝试:

pub fn gen_测试(f:fn(I)->f32)->f32
哪里
I:IntoIterator+默认值,
::项目:添加
{
让start=I::default();
让我们加上一个:I=start.into_iter().map(|p | p+p).collect();
let值:f32=f(加上1);
返回值;
}
按照
I
的思路思考,某个结构包含可能不同类型的多个值,并在这些值上实现一些迭代器

例如:

#[派生(默认)]
结构SomeStruct{
x:u32,
y:f32
}
//我不知道如何跨不同类型实现迭代器
fn some_函数(SomeStruct some_结构)->f32{
(某些结构x为f32+某些结构y)
}
fn main(){
设值=gen_测试(某些_功能);
}
收集时
这里我得到了错误:

类型为
I
的值不能从元素的迭代器生成 类型<代码>::输出<代码>I类型的值<代码> 无法从
std::iter::Iterator


如何解决此问题?

听起来您至少需要两个不同的泛型类型参数,因为
I
可以充当某些
T
的容器,它可以迭代或从中收集,在这种情况下,我们可以使用以下边界:

使用std::iter::fromtiterator;
使用std::ops::Add;
发布fn gen_测试(f:fn(I)->f32)->f32
哪里
I:IntoIterator+Default+FromIterator,
T:添加+复制,
{
让start=I::default();
让我们加上一个:I=start.into_iter().map(|p | p+p).collect();
let值:f32=f(加上1);
价值
}

@JonathanWoollett light现在更不清楚了,因为您仍在尝试收集到
I
中,所以您仍然需要迭代器
中的
。你能更新你的问题,使它更清楚,最好用具体的类型来展示你函数的示例用法吗?补充,再解释一下,我想说的是,不要太关注代码,关注我说的,代码只是我第一次尝试冒险去做这个想法时的粗略尝试。@JonathanWoollett light我已经更新了我的答案。我想这是对的,我仍然在这个领域里忙着弄清楚事情的真相,但是请接受我的投票。非常感谢。