< 返回版块

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值使用的外面的那个不做覆盖...

评论区

写评论
作者 eric642 2020-12-10 15:24

习惯用c和go的那种for的语法..这个突然一下子有点不适应, 前面定义了, 但还是被强制隐藏.这种只能用while吗?

--
👇
Mike Tang: 用while不就好了。非要用for。也许是你的习惯错了。

yuchunzhou 2020-12-10 14:31

i只是个临时变量!

Mike Tang 2020-12-10 12:42

用while不就好了。非要用for。也许是你的习惯错了。

作者 eric642 2020-12-10 00:52

这种虽然也可以, 但是感觉怪怪的, 没法控制什么时候进行隐藏.

--
👇
lithbitren: for语句相当于重新在区块里定义i了,只要不重新定义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); 
}
lithbitren 2020-12-10 00:50

for语句相当于重新在区块里定义i了,只要不重新定义i就得,能够遍历迭代器的语言都是这样的,只有python可以默认操作全局(函数)变量,js(es6)/go等语言都是局部区块变量不影响上级区块的变量。

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); 
}
1 共 5 条评论, 1 页