我有以下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>
答案 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);