Rust 为什么一个值不能在闭包中通过动态分派转换为trait对象?

Rust 为什么一个值不能在闭包中通过动态分派转换为trait对象?,rust,trait-objects,Rust,Trait Objects,给定以下代码: 使用std::iter::Iterator; 性状序列{ 类型SeqType:迭代器; fn-seq(&self)->选项; } 结构倍增器); 恳求{ 类型SeqType=Box; //不起作用 fn seq(&self)->选项{ self.0 .map(| v | Box::new(v.to|vec().into|iter().map(|x | x*2))) } } fn打印顺序(顺序:S){ 设v:Option=seq.seq().map(|i | i.collect()

给定以下代码:

使用std::iter::Iterator;
性状序列{
类型SeqType:迭代器;
fn-seq(&self)->选项;
}
结构倍增器);
恳求{
类型SeqType=Box;
//不起作用
fn seq(&self)->选项{
self.0
.map(| v | Box::new(v.to|vec().into|iter().map(|x | x*2)))
}
}
fn打印顺序(顺序:S){
设v:Option=seq.seq().map(|i | i.collect());
println!(“{:?}”,v);
}
fn main(){
设v=vec![1,2,3,4];
打印顺序(倍频器(部分(&v));
}
编译器将抱怨:

错误[E0308]:类型不匹配
-->src/main.rs:16:9
|
15 | fn seq(&self)->选项{
|----------------应为'std::option::option>`
找到枚举'std::option::option'`
但它的工作原理是替换
seq

fn seq(&self)->选项{
fn转换(s:&[u32])->框{
框::新的(s.to_vec().to_iter().map(|x | x*2))
}
self.0.map(转换)
}
代码可以测试

唯一的区别是,在失败的示例中使用了闭包,而另一个使用(命名?)函数,但逻辑是相同的。这似乎是一个终生的问题,但尚未解决。此外,
Option::map
应该急切地使用该值,然后应该立即使用闭包


为什么闭包示例失败?

看起来您的问题可能由和的答案回答。如果没有,请您的问题解释差异。否则,我们可以将此问题标记为已回答。您可以通过修复
映射
示例。因此,有一种我从未知道的隐含强制。谢谢Shepmaster和特伦特