作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个可变引用向量:
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/
我是一名优秀的程序员,十分优秀!