可以将
安全的将
&mut T
强制转换成 &T
,但如果类型不匹配发生在类型构造器内则无法工作。
playground
use ndarray::*; // 0.13.0
fn print(a: &ArrayView1<i32>) {
println!("{:?}", a);
}
pub fn test() {
let mut x = array![1i32, 2, 3];
print(&x.view_mut());
}
对于上面的代码,我收到以下错误:
|
9 | print(&x.view_mut());
| ^^^^^^^^^^^^^ types differ in mutability
|
= note: expected reference `&ndarray::ArrayBase<ndarray::ViewRepr<&i32>, ndarray::dimension::dim::Dim<[usize; 1]>>`
found reference `&ndarray::ArrayBase<ndarray::ViewRepr<&mut i32>, ndarray::dimension::dim::Dim<[usize; 1]>>`
安全的将
&mut i32
强制转换为&i32
,所以为什么在这种情况下不适用呢?你能提供一些可能会出现问题的示例吗?
println!
语句中添加类型注释,你的示例会出现生命周期错误,而我的则不会。比较一下我的代码(已更新,可以编译)和你的代码(已更新,无法编译)。我会更新我的答案来包含这个信息。 - Frxstrem