4
如何理解以下代碼段?我是Rust的新手,但在C/Haskell和一點C++方面有背景知識。我能找到的唯一參考是deref coercions。瞭解(自動?)添加參考和數字值時的參考/強制
fn main() {
let xs: [u32; 4] = [0, 1, 2, 3];
let mut i: u32 = 0;
for x in xs.iter() {
if i > *x { // It looks x is an iterator. Understood.
i = i + x; // no error. (coerced)
//Quote: "Rust will do this as many times
// as possible until the types match."
i = i + *x; // no error (explicit deref)
i += x; // error about u32/&u32 mismatch. Why the magic failed?
i += *x; // no error (explicit deref)
}
}
println!("{}", i);
}
感謝您的回答和參考。 – Nybble
我認爲'a + b'是'a.add(b)'的糖(來自'std :: ops :: Add'的'add')。如果是這種情況,'a + b' *將是'a'自身的方法調用,並且自動解引用將適用於操作符。我想知道這種方法是否有缺點,因爲Rust選擇不定義這樣的運算符。 – user4815162342
@ user4815162342有自動解除引用,但它僅適用於'a' – torkleyy