为什么这个Rust程序忽略了不变性

时间:2017-03-24 04:16:47

标签: rust

我有以下Rust程序,我希望它会导致编译错误,因为稍后会重新分配overflow:hidden。但它符合并提供输出。为什么呢?

<div style="height: 5rem; overflow: hidden">
    <ul>
        <li><a href="#">Link 1</a></li>
        <li><a href="#">Link 2</a></li>
        <li><a href="#">Link 3</a></li>
        <li><a href="#">Link 4</a></li>
        <li><a href="#">Link 5</a></li>
        <li><a href="#">Link 6</a></li>
        <li><a href="#">Link 7</a></li>
        <li><a href="#">Link 8</a></li>
        <li><a href="#">Link 9</a></li>
        <li><a href="#">Link 10</a></li>
    </ul>
</div>

1 个答案:

答案 0 :(得分:13)

Rust实际上允许您隐藏块中的其他变量,因此let x: i32 = 565;正在定义变量x,该变量使用{{隐藏前面定义的x 1}}。请注意,您甚至可以重新定义let (x,y) = (1,3);以使其具有不同的类型,因为第二个x是一个全新的变量!

x

这个reddit thread详细说明了为什么这个有用。提到的两件看起来很有趣的事情是:

  • 对于获取变量所有权但返回相同类型的另一个变量的操作,它有时候看起来很不错&#34;重新定义返回的变量以具有相同的名称。来自here

    fn main(){
       let x = 1;
       println!("Now X is {}",x);
    
       let x = "hi";
       println!("Now X is {}",x);
    }
    
  • 或者使变量成为不可变的:

    let iter = vec.into_iter();
    let iter = modify(iter);
    let iter = double(iter);