使用Iterator :: collect时,必须在此上下文中知道类型

时间:2015-06-22 04:14:28

标签: rust

我想获得一段我已经拆分的字符串:

fn fn1(my_string: String) -> bool {
    let mut segments = my_string.split(".");
    segments.collect().len() == 55
}

fn main() {}
error[E0619]: the type of this value must be known in this context
 --> src/main.rs:3:5
  |
3 |     segments.collect().len() == 55
  |     ^^^^^^^^^^^^^^^^^^^^^^^^

如何修复该错误?

1 个答案:

答案 0 :(得分:8)

在迭代器上,the collect method可以生成许多类型的集合:

fn collect<B>(self) -> B
where
    B: FromIterator<Self::Item>, 

实施FromIterator的类型包括VecStringmany more。因为有很多可能性,所以需要约束结果类型。您可以使用.collect::<Vec<_>>()let something: Vec<_> = some_iter.collect()指定类型。

在类型已知之前,您无法调用方法len(),因为无法知道未知类型是否具有特定方法。

如果您只是想知道迭代器中有多少项,请使用Iterator.count();为此目的创建一个向量是相当低效的。