我试图使用 ::from()
快速创建一个 VecDeque
。我有以下Rust代码:
use std::collections::VecDeque;
fn main() {
let ring = VecDeque::from([1, 2, 3]);
println!("{:?}", ring);
}
我遇到了以下编译器错误:
error[E0277]: the trait bound `std::collections::VecDeque<_>: std::convert::From<[{integer}; 3]>` is not satisfied
--> src/main.rs:4:16
|
4 | let ring = VecDeque::from([1, 2, 3]);
| ^^^^^^^^^^^^^^ the trait `std::convert::From<[{integer}; 3]>` is not implemented for `std::collections::VecDeque<_>`
|
= help: the following implementations were found:
<std::collections::VecDeque<T> as std::convert::From<std::vec::Vec<T>>>
= note: required by `std::convert::From::from`
这看起来像是VecDeque
集合没有实现from
trait,但文档表明它是有的。我做错了什么?
let ring = VecDeque::from(vec![1, 2, 3]);
而不需要额外的use
语句。这种方法有什么问题吗? - Simon Brahanuse
语句呢?它不会以任何方式造成伤害。 - Sven MarnachVec
在所有 Rust 代码中普遍使用。选择哪个对你来说更符合人体工程学就好了。 - DougVecDeque<&'static i32>
而不是VecDeque<i32>
。另外,使用FromIterator
最常见的方式是使用Iterator::collect
,这不需要被use
。let ring: VecDeque<_> = [1, 2, 3].iter().copied().collect();
更合理地解释了问题中的代码。 - trent