代码之家  ›  专栏  ›  技术社区  ›  user459872

为什么“单元”类型实现“扩展”特性?

  •  4
  • user459872  · 技术社区  · 2 年前

    根据 documentation of unit type () ,它实现了 Extend trait .

    fn extend<T>(&mut self, iter: T) 
    where
        T: IntoIterator<Item = ()>, 
    

    扩展 具有迭代器内容的集合 .

    但我并不真正理解它的用途。这让我可以做以下事情:

    fn main() {
        let mut r = ();
        println!("{:?}", r); // print `()`
        r.extend(vec![(), ()]);
        println!("{:?}", r); // This also print `()`
    }
    

    但这对我来说毫无意义。

    所以我的问题是为什么单元类型实现 延伸 特质

    0 回复  |  直到 2 年前
        1
  •  14
  •   Patrick Alexey S. Larionov    2 年前

    只是胡乱猜测,但是 this piece of documentation 给出提示

    impl FromIterator<()> for ()
    

    将迭代器中的所有单元项折叠为一个。

    当与更高级别的抽象(如收集到Result<()、E>您只关心错误:

    use std::io::*;
    let data = vec![1, 2, 3, 4, 5];
    let res: Result<()> = data.iter()
        .map(|x| writeln!(stdout(), "{x}"))
        .collect();
    assert!(res.is_ok());
    

    那个 Extend 在标准库中也用于方便地聚合函数调用,就好像 () 是一个集合。