この質問は、最初は reddit のこの投稿で見つかりました。
経験豊富な Rust ユーザーは、タプル内の要素が同じである必要がないことに気付くでしょう (同じ場合は、配列を使用する必要があります!)。そのため、それらを繰り返し処理しても意味がありません。便利です。
これらのケースは、タプルの型を同じサイズのない型 ([u8]
または など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))
}