rust 为什么没有智能指针的“IntoIterator”实现?

iovurdzv  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(136)

似乎可以这样写:

  1. impl<T> IntoIterator for &T
  2. where
  3. T: Deref,
  4. &(T::Target): IntoIterator,
  5. {
  6. type Item = (&(T::Target))::Item;
  7. type IntoIter = (&(T::Target))::IntoIter;
  8. fn into_iter(self) -> Self::IntoIter {
  9. self.deref().into_iter()
  10. }
  11. }

孤儿规则防止在标准库之外实现它。
这不在标准库中的技术或人体工程学原因是什么?或者,如果Deref太宽,为什么&Arc<T>&Box<T>没有IntoIterator

r1zk6ea1

r1zk6ea11#

首先,clashes with the existing impl<I> IntoIterator for I where I: Iterator也是完全不必要的,into_iter可以通过deref获得:

  1. let b = Box::new([1, 2]);
  2. for e in b.into_iter() {
  3. dbg!(e);
  4. }

工程.
冲突的发生是因为没有办法保证一个类型不会同时实现DerefIterator

相关问题