gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:47:21 24 4
gpt4 key购买 nike

我有一个可变引用向量:

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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com