Rust thực sự cho phép bạn shadow biến khác trong một khối, vì vậy let x: i32 = 565;
được xác định một mới biến x
rằng bóng tối các x
được xác định trước đó với let (x,y) = (1,3);
. Lưu ý rằng bạn thậm chí có thể đã xác định lại x
để có một loại khác kể từ lần thứ hai x
là một biến hoàn toàn mới!
fn main(){
let x = 1;
println!("Now X is {}",x);
let x = "hi";
println!("Now X is {}",x);
}
reddit thread xem chi tiết hơn tại sao điều này hữu ích. Hai điều được đề cập mà dường như thú vị là:
Đối với hoạt động đó mất quyền sở hữu của biến, nhưng trở lại một biến khác cùng loại, đôi khi nó "có vẻ tốt đẹp" để xác định lại biến trở về có cùng tên. Từ here:
let iter = vec.into_iter();
let iter = modify(iter);
let iter = double(iter);
Hoặc để làm cho một biến bất biến:
let mut x;
// Code where `x` is mutable
let x = x;
// Code where `x` is immutable
Tại sao điều này được cho phép trong ngôn ngữ? Điều này không gây ra lỗi logic không dễ dàng để tìm trong chương trình lớn? Mục đích của bóng tối là gì và có bất kỳ ngôn ngữ nào khác sử dụng khái niệm này không? – Viraj
Làm cách nào để bạn có thể tham chiếu biến trước đây? – Dai
@Dai Tôi không nghĩ rằng bạn có thể ... Bạn luôn có thể chuyển quyền sở hữu cho biến khác 'let y = x'. – Alec