我有这两段代码:
fn main() {
let mut x: int = 5;
x = 6;
println!("value {}", x);
}
使用此代码,编译器将发出警告:
永远不会在
读取该值let x: int = 5
但是使用以下代码,编译器不会。
struct Point {
x: int,
y: int,
}
fn main() {
let mut p = Point {x: 1i, y: 2i};
p.x = 5;
println!("value {}, {}", p.x, p.y);
}
为什么会这样?我们在x = 1i
时从未读过这个值。相反,我们读取x = 5i
处的值。那么为什么编译器不像之前的代码那样引发警告?
答案 0 :(得分:2)
我认为这是因为编译器只分析直接的局部变量,而不是深入到结构中。我认为完整的分析需要一个相当复杂的算法,并且几乎不需要它。
或者它可能是编译器中的错误,或者更可能是未实现的功能。如果您认为重要,可以向issue tracker提交票证。