首先代码如下 let i = 1; while i<=10 { println!("{}",i); let i=i+1; }
我是刚刚入门rust语言,对于遮蔽机制也还不慎掌握。看了Rust程序设计语言的遮蔽介绍,我理解遮蔽可以当做一种对不可变变量改值的方式,但是当我运行这个代码后,发现,系统一直在死循环输出1。
所以我可能对遮蔽机制不太理解,希望懂的大佬指点一二。
Ext Link:
1
共 6 条评论, 1 页
首先代码如下 let i = 1; while i<=10 { println!("{}",i); let i=i+1; }
我是刚刚入门rust语言,对于遮蔽机制也还不慎掌握。看了Rust程序设计语言的遮蔽介绍,我理解遮蔽可以当做一种对不可变变量改值的方式,但是当我运行这个代码后,发现,系统一直在死循环输出1。
所以我可能对遮蔽机制不太理解,希望懂的大佬指点一二。
评论区
写评论我好像明白了,遮蔽实际上是让一个变量的名字可以重新用了,但是实际上已经在内存上申请了新的空间是吗。 那么之前有这个名字的变量的内存还在,只不过在被遮蔽期间不能用了,等到作用域结束被回收内存,是这个意思嘛。
--
👇
Neutron3529: 遮蔽其实是这个意思
是开了一个新变量,并不是把旧变量改成新的值
这样看就很显然了.
如果你真的想用while:
如果你一定要给不可变的变量赋值……
多谢!学到了!
--
👇
Neutron3529: 讲道理,Rust超级冤枉的
你明明指定了i不可变
那么Rust表示,i既然不可变,i<10也不可变,我算一次就够了
然后Rust就死循环了
如果你编译Rust,你会发现一个warning: unused variable:
i
这正说明了,你的let i=i+1并没有起作用
BTW,可以用论坛理解Rust的let:如果你想更改帖子,你只能重发然后删掉原来的内容
但,如果你不删,原来的内容会一直保存着。
所以说论坛就一个大号Rust
……i了i了……
嗷嗷,明白了,谢谢你!
--
👇
noalias: println中的i是引用的外部作用域的i,每一次循环while语句中声明的i会drop,所以这个i并没有产生任何作用
println中的i是引用的外部作用域的i,每一次循环while语句中声明的i会drop,所以这个i并没有产生任何作用
讲道理,Rust超级冤枉的
你明明指定了i不可变
那么Rust表示,i既然不可变,i<10也不可变,我算一次就够了
然后Rust就死循环了
如果你编译Rust,你会发现一个warning: unused variable:
i
这正说明了,你的let i=i+1并没有起作用
BTW,可以用论坛理解Rust的let:如果你想更改帖子,你只能重发然后删掉原来的内容
但,如果你不删,原来的内容会一直保存着。
所以说论坛就一个大号Rust
……i了i了……
遮蔽其实是这个意思
是开了一个新变量,并不是把旧变量改成新的值
这样看就很显然了.
如果你真的想用while:
如果你一定要给不可变的变量赋值……