为什么IntoIteratortrait需要显式指定关联类型Item?

由于相关类型IntoIter的的IntoIterator特点,实现了Iterator特质,是不是有足够的推断关联的类型Item

回答

为什么IntoIterator特征需要显式type Item声明?

没有。你是正确的,当你impl IntoIterator for ...Item多余的,并可能被通过获得IntoIter


这是在PR #22313 中引入的。简而言之,引入的原因是为了简化 where 子句。如果您必须指定,IntoIter那么这很快就会变得很麻烦。

where I: IntoIterator<IntoIter = ...>

在这种情况下,这样做要容易得多:

where I: IntoIterator<Item = ...>

让我们考虑一个随机示例,例如print_strings。然后在你需要做这样的事情之前:

fn print_strings<I, T>(iter: I)
where
    I: IntoIterator<IntoIter = T>,
    T: Iterator<Item = &'static str>,
{
    for s in iter {
        println!("{}", s);
    }
}

而现在可以简化为:

fn print_strings<I>(iter: I)
where
    I: IntoIterator<Item = &'static str>,
{
    for s in iter {
        println!("{}", s);
    }
}

fn main() {
    print_strings(vec!["foo", "bar", "baz"]);
}


以上是为什么IntoIteratortrait需要显式指定关联类型Item?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>