2015-04-16 144 views

回答

15

功能參數和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 
相關問題