4
有人可以解釋這兩者之間有什麼區別,何時最常使用mut a: &T
?`mut a:&T`和`a:&mut T`有什麼區別?
有人可以解釋這兩者之間有什麼區別,何時最常使用mut a: &T
?`mut a:&T`和`a:&mut T`有什麼區別?
功能參數和let綁定在鏽病是合適的圖案,像那些在=>
在匹配左邊(不同之處在於讓和參數圖案必須是無可辯駁,即,它們必須總是匹配)。 mut a
只是模式語法的一部分,這意味着a
是一個可變綁定。另一方面,它是一種類型 - 可變或不可變的參考。
有參考文獻和模式的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