我希望将一个
我尝试了类似以下的代码:
Vec<T>
转换为一个 Vec<U>
,其中 T
是某种原始类型,而 U
是 T
的新类型: struct U(T)
。我尝试了类似以下的代码:
struct Foo(u32);
fn do_something_using_foo(buffer: &mut Vec<Foo>) {}
fn main() {
let buffer: Vec<u32> = vec![0; 100];
do_something_using_foo(&mut buffer as Vec<Foo>);
}
我不想复制向量,我想用新类型Foo
包装u32
字段。
这会导致错误:
error[E0308]: mismatched types
--> main.rs:8:28
|
8 | do_something_using_foo(&mut buffer as Vec<Foo>);
| ^^^^^^^^^^^^^^^^^^^^^^^ expected mutable reference, found struct `std::vec::Vec`
|
= note: expected type `&mut std::vec::Vec<Foo>`
found type `std::vec::Vec<Foo>`
= help: try with `&mut &mut buffer as Vec<Foo>`
error: non-scalar cast: `&mut std::vec::Vec<u32>` as `std::vec::Vec<Foo>`
--> main.rs:8:28
|
8 | do_something_using_foo(&mut buffer as Vec<Foo>);
| ^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error(s)
Vec<T>
以&[U]
、&mut [U]
或&mut Vec<U>
的形式访问?(提示:使用切片会简单得多。) - bluss&mut [U]
是可以接受的,尽管&mut Vec<U>
更可取。 - tversteeg&mut [U]
是可以接受的,那么它比&mut Vec<U>
更可取。 - ShepmasterVec
有一个fn map_in_place<U, F>(self, f: F) -> Vec<U>
方法,当T
和U
的大小相同时可用。这个方法在 Rust 1.4 中被删除了,但似乎有一个包可以做到这一点。但在那种情况下可能过度使用。 - mcarton