似乎我无法在 rust 中重新绑定参考变量
let mut arr = [1, 2, 3, 4];
let & mut a0 = & mut arr[0];
println!("a0 = {}", a0);
let mut i = 0;
a0 = &mut i; // mismatched types: expected integer, found `&mut {integer}`
Run Code Online (Sandbox Code Playgroud)
但我可以在里面重新绑定一个引用struct:
#[derive(Debug)]
struct Ref<'a, T> {
val: &'a T
}
let mut arr = [1, 2, 3, 4];
let mut r = Ref {
val: & arr[0]
};
println!("r = {:#?}", r);
r.val = & arr[1];
Run Code Online (Sandbox Code Playgroud)
我不能重新绑定引用变量是真的吗?
如果它不能,那么为什么struct像 C++ 一样允许它而不是禁止它?
顺便说一句,Ref<'a, T>在我的代码中是否有与此处相同的标准库类型?
当你写
let & mut a0 = & mut arr[0];
Run Code Online (Sandbox Code Playgroud)
你在这个 let 赋值中使用模式匹配:
& mut {}是图案。如果你替换{},你会得到a0匹配arr[0]。
的类型arr[0]是usize这样你定义一个a0类型的变量usize。
这就是为什么以后不能输入 type 值的原因&mut usize。
如果你想a0成为一个类型&mut usize,做
let mut a0 = &mut arr[0];
Run Code Online (Sandbox Code Playgroud)
然后你可以稍后做
let mut i = 0;
a0 = &mut i;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |