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>) {}

最佳答案

如果需要进行实际转换,请参见Joe Clay's answer。但是,您可能不需要首先进行转换!
不要更改参数,而要更改函数,使其接受可变和不可变的引用。在这里,我们使用 Borrow 对这两者进行抽象:

use std::borrow::Borrow;

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

    let mut_vec = vec![&mut st];
    cool_func(mut_vec);

    let immut_vec = vec![&st];
    cool_func(immut_vec);
}

fn cool_func<S>(_: Vec<S>)
where
    S: Borrow<String>,
{
}
也可以看看:
  • How to pass Iterator<String> as Iterator<&str>?
  • Why is it discouraged to accept a reference to a String (&String), Vec (&Vec), or Box (&Box) as a function argument?
  • 关于casting - 如何将Vec <&mut T>转换为Vec <&T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65115151/

    相关文章:

    c++ - 涉及接口(interface)时如何从库中扩展类?

    c - 使用 %d 类型转换导致输出不正确的值

    rust - 为什么我可以遍历一个切片两次,而不是一个向量?

    rust - Rayon 无法将 .chars() 迭代器转换为 .par_iter()

    rust - 从stdin读取整行,包括\n直到文件结束

    rust - 是否可以使用相同的文件进行读写?

    java - Java 程序中单行中的多个类型转换

    c - 为什么我没有收到将指针转换为 int 的警告?

    c# - 如何将 LambdaExpression 转换为类型化的 Expression<Func<T, T>>

    exception - 如何从调用堆栈中的多个层返回?