当结构成员未读时,为什么编译器不会发出警告?

时间:2014-12-29 09:49:01

标签: struct rust unused-variables

我有这两段代码:

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处的值。那么为什么编译器不像之前的代码那样引发警告?

1 个答案:

答案 0 :(得分:2)

我认为这是因为编译器只分析直接的局部变量,而不是深入到结构中。我认为完整的分析需要一个相当复杂的算法,并且几乎不需要它。

或者它可能是编译器中的错误,或者更可能是未实现的功能。如果您认为重要,可以向issue tracker提交票证。