Tôi đang làm việc thông qua các ví dụ trong Rust by Example.Tại sao việc biên dịch không thành công khi một thành viên của một giá trị di chuyển được gán cho?
fn main() {
let mut point: Point = Point { x: 0.3, y: 0.4 };
println!("point coordinates: ({}, {})", point.x, point.y);
let rectangle = Rectangle {
p1: Point { x: 1.0, y: 1.0 },
p2: point,
};
point.x = 0.5; // Why does the compiler not break here?
println!(" x is {}", point.x); // breaks here
println!("rectangle is {:?} ", rectangle);
}
tôi nhận được lỗi này (Rust 1.7):
sử dụng các giá trị chuyển:
point.x
println ("x là {}", point.x);!
Bây giờ tôi hiểu rằng tôi đã point
đến đối tượng Rectangle
và đó là lý do tại sao tôi không còn có thể truy cập vào nó, nhưng tại sao biên soạn thất bại trên println!
và không phải là nhiệm vụ trên dòng trước?
[A sinh sản nhỏ hơn] (http://is.gd/j8aovB). – Shepmaster
Tôi đoán "sử dụng giá trị được chuyển" có thể được hiểu là điểm mà tại đó bạn thử và đọc giá trị của nó. Việc gán cho nó không thực sự thay đổi sự bảo đảm của Rust theo nghĩa "kỹ thuật", chỉ khi bạn thử và tiêu thụ một giá trị được di chuyển. Điều đó nói rằng, tôi không hiểu hầu hết điều này cũng đủ cho bản thân mình vì vậy tôi muốn nghe từ những người có nhiều hơn thế này. –
Cảm thấy giống như lỗi compiller. Điều thú vị hơn là 'let p2 = point; point.x = 0.5; println! ("X là {}", p2.x); 'biên dịch tốt và in 0,3, vì vậy' point.x = 0.5; 'không nothng – qthree