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

5 rust

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

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

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

我该如何解决这个错误?

Chr*_*gan 8

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

fn collect<B>(self) -> B
where
    B: FromIterator<Self::Item>, 
Run Code Online (Sandbox Code Playgroud)

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

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


如果你纯粹想要找出迭代器中有多少项,请使用Iterator.count(); 为此目的创建向量是相当低效的.