2015-07-08 13 views
11

Có thể làm cho các ràng buộc sau trong Rust:Lết & cú pháp mứt

let &mut a = &mut 5; 

Nhưng điều đó có nghĩa là chính xác? Ví dụ: let a = &mut 5 tạo ràng buộc không thay đổi loại &mut i32, let mut a = &mut 5 tạo ra ràng buộc có thể thay đổi loại &mut i32. Điều gì về let &mut?

Trả lời

10

Một cách dễ dàng để kiểm tra loại một cái gì đó là gán nó vào loại sai:

let _:() = a; 

Trong trường hợp này giá trị là một "biến thể thiếu", hoặc một số nguyên theo giá trị. Nó không phải là mutable (như thử nghiệm với a += 1 hiển thị).

Điều này là do bạn đang sử dụng cú pháp destructuring. Bạn đang mô hình phù hợp với &mut 5 của bạn chống lại một &mut _, giống như nếu bạn đã viết

match &mut 5 { &mut a => { 
// rest of code 
} }; 

Vì vậy bạn đang bổ sung thêm một tài liệu tham khảo có thể thay đổi và ngay lập tức dereferencing nó.

Để ràng buộc một tài liệu tham khảo có thể thay đổi một giá trị thay vào đó, bạn có thể làm

let ref mut a = 5; 

này rất hữu ích trong destructuring lấy tham chiếu đến nhiều giá trị nội tại.

+0

Cảm ơn! Tôi đã quên mất khả năng sử dụng cú pháp hủy trong liên kết cho phép –