有人可以解释一下这两者之间有什么区别以及什么时候mut a: &T
最常用?
Rust 中的函数参数和 let 绑定是正确的模式,就像左边的那些=>
匹配(除了 let 和参数模式必须是无可辩驳的,即它们必须始终匹配)。mut a
只是模式语法的一部分,这意味着a
是一个可变绑定。&mut T
/&T
另一方面,是类型 - 可变或不可变引用。
有四种可能的组合mut
在参考文献和模式中:
a: &T // immutable binding of immutable reference
mut a: &T // mutable binding of immutable reference
a: &mut T // immutable binding of mutable reference
mut a: &mut T // mutable binding of mutable reference
第一个变体是绝对不可变的(不考虑内部可变性)Cell
并考虑到这一点)-你既不能改变什么a
既不指向它当前引用的对象。
第二种变体允许您更改a
指向其他地方,但它不允许您更改它指向的对象。
第三个变体不允许更改a
指向其他东西,但它允许改变它引用的值。
最后一个变体允许两者改变a
引用其他东西并改变该引用当前指向的值。
考虑到上述情况,您可以看到哪里mut a: &T
可以使用。例如,您可以在循环中编写对字符串的一部分的搜索,以供进一步使用,如下所示:
let mut s: &str = source;
loop {
// ... whatever
s = &source[i..j];
}
// use the found s here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)