2014-12-29 54 views
0

我有这2段代码:为什么编译器在未读结构成员时不会发出警告?

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

回答

2

我认为这是因为编译器只分析即时局部变量,并没有深入到结构中。我想像完整的分析需要一个相当复杂的算法,而且几乎没有必要这样做。

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

+0

不是一个错误,只是没有实现到最大程度上可以想象的东西。 –

+0

我可能没有正确表达自己。在“错误”下,我的意思是完全没有实现的功能。 –

相关问题