0

我有这两条代码:

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

4

1 回答 1

2

我认为发生这种情况是因为编译器只分析直接局部变量,而不是更深入地研究结构。我想完整的分析需要一个相当复杂的算法,而且几乎不需要它。

或者它可能是编译器中的一个错误,或者更有可能是一个未实现的功能。如果您认为这很重要,您可以向问题跟踪器提交票证。

于 2014-12-29T10:27:53.240 回答