bool { let mut segments = my_string.split("."); -6ren">
gpt4 book ai didi

rust - 为什么在使用 Iterator::collect 时得到 "type annotations needed"?

转载 作者:行者123 更新时间:2023-11-29 07:49:58 24 4
gpt4 key购买 nike

我想得到我拆分过的字符串的长度:

fn fn1(my_string: String) -> bool {
let mut segments = my_string.split(".");
segments.collect().len() == 55
}
error[E0282]: type annotations needed
--> src/lib.rs:3:14
|
3 | segments.collect().len() == 55
| ^^^^^^^ cannot infer type for type parameter `B` declared on the associated function `collect`
|
= note: type must be known at this point

以前的编译器版本报错:

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

我该如何修复这个错误?

最佳答案

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

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

实现 FromIterator 的类型包括 Vec , Stringmany more .因为有这么多的可能性,所以需要对结果类型进行约束。您可以使用 .collect::<Vec<_>>() 之类的内容指定类型或 let something: Vec<_> = some_iter.collect() .

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


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

关于rust - 为什么在使用 Iterator::collect 时得到 "type annotations needed"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30972047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com