casting - 如何将 Vec<&mut T> 转换为 Vec<&T>?

标签 casting rust

我有一个可变引用向量:

struct T;
let mut mut_vec: Vec<&mut T> = vec![];

我如何将它(的副本)传递给一个接受不可变引用向量的函数?

fn cool_func(mut immut_vec: Vec<&T>) {}

最佳答案

您可以取消引用并重新借用可变引用,然后将它们添加到新的 Vec:

fn main() {
    let mut st = String::new();

    let mut_vec = vec![&mut st];
    let immut_vec = mut_vec.into_iter().map(|x| &*x).collect();

    cool_func(immut_vec);
}

fn cool_func(_: Vec<&String>) {}

但是请注意,这会消耗原始的 Vec - 你无法真正解决这个问题,就好像原始的 Vec 仍然存在一样,你会有两个可变的以及对同一数据的不可变引用,这是编译器不允许的。

关于casting - 如何将 Vec<&mut T> 转换为 Vec<&T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56754101/

相关文章:

c# - 如何在不知道封闭泛型类型的情况下访问泛型属性

rust - 通过设置变量类型和使用 `as` 进行类型转换有什么区别?

rust - 如何在处理程序之间传递变量

c# - 哪个是首选 : new Nullable<int> or (int? )null?

java - 通过 REST API 调用 JBPM 流程并传入自定义对象时发生类转换异常

rust - 如何为特征对象实现迭代器

rust - Rust 中的命令模式

macos - 无法在 macOS 10.12 : object file was built for newer OSX version (10. 7) 上编译 Rust 代码而不是被链接 (8.0)

pointers - 如何将 lParam 转换为多个结构?

casting - 在 Kotlin 中类型转换的成本是多少?