我想获得一段我已经拆分的字符串:
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
| ^^^^^^^^^^^^^^^^^^^^^^^^
如何修复该错误?
答案 0 :(得分:8)
在迭代器上,the collect
method可以生成许多类型的集合:
fn collect<B>(self) -> B
where
B: FromIterator<Self::Item>,
实施FromIterator
的类型包括Vec
,String
和many more。因为有很多可能性,所以需要约束结果类型。您可以使用.collect::<Vec<_>>()
或let something: Vec<_> = some_iter.collect()
指定类型。
在类型已知之前,您无法调用方法len()
,因为无法知道未知类型是否具有特定方法。
如果您只是想知道迭代器中有多少项,请使用Iterator.count()
;为此目的创建一个向量是相当低效的。