【发布时间】:2020-01-04 11:16:03
【问题描述】:
以下代码编译失败
fn main() {
let n = 10;
let mut s = String::new();
let v = vec!['a'; n];
s += &v.into_iter().collect();
}
出现错误:
error[E0277]: a collection of type `str` cannot be built from an iterator over elements of type `char`
--> src/main.rs:5:25
|
5 | s += &v.into_iter().collect();
| ^^^^^^^ a collection of type `str` cannot be built from `std::iter::Iterator<Item=char>`
|
= help: the trait `std::iter::FromIterator<char>` is not implemented for `str`
但是这个修改似乎有效:
fn main() {
let n = 10;
let mut s = String::new();
let v = vec!['a'; n];
let t: String = v.into_iter().collect();
s += &t;
}
我试图了解原因。任何提示/解释都会有所帮助。谢谢。
【问题讨论】:
-
顺便说一句,您可以使用
String::extend代替:doc.rust-lang.org/std/iter/trait.Extend.html - 例如,s.extend(v.into_iter());甚至s.extend(v),因为extend接受IntoIterator。
标签: rust