eric642 发表于 2020-12-10 00:39
fn main() { let mut i = 0; for i in (1..10) { println!("{}", i); } println!("{}", i); }
似乎因为变量作用域的问题, i的值并没有按照预期变成9, 这个能咋办让for循环的里的i值使用的外面的那个不做覆盖...
习惯用c和go的那种for的语法..这个突然一下子有点不适应, 前面定义了, 但还是被强制隐藏.这种只能用while吗?
-- 👇 Mike Tang: 用while不就好了。非要用for。也许是你的习惯错了。
i只是个临时变量!
用while不就好了。非要用for。也许是你的习惯错了。
这种虽然也可以, 但是感觉怪怪的, 没法控制什么时候进行隐藏.
-- 👇 lithbitren: for语句相当于重新在区块里定义i了,只要不重新定义i就得。
for
i
fn main() { let mut i = 0; for j in (1..10) { i = j; println!("{}", i); } println!("{}", i); }
fn main() { let mut i = 1; while i < 10 { println!("{}", i); i += 1; } println!("{}", i); }
for语句相当于重新在区块里定义i了,只要不重新定义i就得,能够遍历迭代器的语言都是这样的,只有python可以默认操作全局(函数)变量,js(es6)/go等语言都是局部区块变量不影响上级区块的变量。
评论区
写评论习惯用c和go的那种for的语法..这个突然一下子有点不适应, 前面定义了, 但还是被强制隐藏.这种只能用while吗?
--
👇
Mike Tang: 用while不就好了。非要用for。也许是你的习惯错了。
i只是个临时变量!
用while不就好了。非要用for。也许是你的习惯错了。
这种虽然也可以, 但是感觉怪怪的, 没法控制什么时候进行隐藏.
--
👇
lithbitren:
for
语句相当于重新在区块里定义i
了,只要不重新定义i
就得。for
语句相当于重新在区块里定义i
了,只要不重新定义i
就得,能够遍历迭代器的语言都是这样的,只有python可以默认操作全局(函数)变量,js(es6)/go等语言都是局部区块变量不影响上级区块的变量。