似乎可以这样写:
impl<T> IntoIterator for &T
where
T: Deref,
&(T::Target): IntoIterator,
{
type Item = (&(T::Target))::Item;
type IntoIter = (&(T::Target))::IntoIter;
fn into_iter(self) -> Self::IntoIter {
self.deref().into_iter()
}
}
孤儿规则防止在标准库之外实现它。
这不在标准库中的技术或人体工程学原因是什么?或者,如果Deref
太宽,为什么&Arc<T>
或&Box<T>
没有IntoIterator
?
1条答案
按热度按时间r1zk6ea11#
首先,clashes with the existing
impl<I> IntoIterator for I where I: Iterator
也是完全不必要的,into_iter
可以通过deref获得:工程.
冲突的发生是因为没有办法保证一个类型不会同时实现
Deref
和Iterator
。