这个问题最初是在 reddit 的这篇文章中找到的。
虽然有经验的 Rust 用户会发现元组中的元素不必相同(如果是,则应该使用数组!),因此迭代它们没有意义,但在某些情况下仍然存在这种情况很有用。
这些情况是元组的类型可以转换为相同的未调整大小的类型(例如[u8]
or dyn Trait
)。
演示:
trait Dummy {}
impl Dummy for () {}
impl Dummy for i32 {}
fn mut_tuple_to_iter(v: &mut ((), i32)) -> impl Iterator<Item = &mut dyn D> {
//How do I implement this?
}
我找不到写上述内容的好方法。任何想法?
要查看一个不够漂亮的可能答案,这里是:
use core::iter::once;
trait D {}
impl D for () {}
impl D for i32 {}
fn mut_tuple_to_iter(v: &mut ((), i32)) -> impl Iterator<Item = &mut dyn D> {
once(&mut v.0 as &mut dyn D).chain(once(&mut v.1 as &mut dyn D))
}