【问题标题】:Understanding Generic FromIterator in Rust理解 Rust 中的泛型 FromIterator
【发布时间】:2020-05-12 09:20:59
【问题描述】:

我是 Rust 新手,我发现自己迷失在第二行。我该如何解释它?哪一个是我可以用来转换为SimpleLinkedList 的交互器?

impl<T> FromIterator<T> for SimpleLinkedList<T> {
    fn from_iter<I: IntoIterator<Item = T>>(_iter: I) -> Self {
        unimplemented!()
    }
}

【问题讨论】:

    标签: generics rust linked-list iterator traits


    【解决方案1】:

    我发现自己迷失在第二行。我该如何解释它?

    什么部分? from_iter 被定义为在类型 I 上参数化的泛型函数。然后该类型被限制在(意味着它必须实现)IntoIterator&lt;Item=T&gt;

    IntoIterator&lt;Item=T&gt; 表示可以迭代该类型(转换为Iterator)并产生T。用其他语言的术语来说,它是 Ts 的一个迭代ble

    所以from_iter 是一个通用函数,其输入是SimpleLinkedList 应包含的任何项目的迭代ble (IntoIterator)。

    谁会是互动者

    _iter.into_iter() 将是输入迭代器。您也可以使用 for 循环对 _iter 进行迭代,因为它使用 IntoIterator trait 隐式地​​将其 RHS 转换为迭代器。

    【讨论】:

      【解决方案2】:

      一开始看起来很吓人,但实现起来非常简单。

      impl<T> FromIterator<T> for SimpleLinkedList<T> {
          fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self {
              let mut list = SimpleLinkedList::new();
              for item in iter {
                  list.push(item);
              }
              list
          }
      }
      

      要知道的关键是实现特征IntoIterator 的类型可以在for-in 循环中使用。 Item = T 仅表示迭代器返回 T 类型的项目。您只需遍历 iter 并将项目推送到您的 SimpleLinkedList 结构中即可进行转换。

      【讨论】:

      • 另外,非常有用!感谢您的回答
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多