linux - rust 循环中的阴影变量

标签 linux for-loop rust

我是Rust的新手,我不确定为什么在foo循环中未修改阴影变量for的值

fn main() {
    let foo: i32 = 5;
    for _x in 0..5{
    let foo = foo+1;
    }
    println!("Value of foo: {}", foo);
    //This prints Value of foo: 5

    let bar: i32 = 5;
    let bar = bar+1;
    println!("Value of bar: {}", bar);
    //This prints Value of foo: 6
}

我经历了Variables and Mutability section和一些stackoverflow问题,但是我找不到foo的值未被修改的原因?
我在loop中看到了相同的行为
  • forloop对阴影变量有一些限制吗?为什么不允许呢?
  • 如果在循环中隐藏变量不是一个好习惯,那么我应该使用mut能力变量吗?
  • cargo 版本1.42.0
  • 最佳答案

    let“引入/创建一个新变量”。

    因此,let foo = foo+1;创建了一个仅位于循环内部的名为“foo”的新变量。该变量被初始化为foo+1,只有“右侧foo”是指已经存在的foo

    因此,仅创建了“内部循环foo”,循环未触及外部foo

    如果要修改外部foo,请尝试以下操作:

    let mut foo: i32 = 5; // mut tells rust that variable is going to be modified
    for _x in 0..5{
        foo = foo+1; // no "let", so not introducing a new variable
    }
    println!("Value of foo: {}", foo);
    

    另一方面,let bar=bar+1在与以前的bar相同的作用域内创建了一个新的变量bar,因此第一个bar被新的bar遮盖,并且基本上不再可以访问。

    关于linux - rust 循环中的阴影变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61303327/

    相关文章:

    linux - 计算常量时出现范围检查错误

    linux - Trustzone:CPU0 非安全,CPU1 安全

    rust - 如何将泛型 T 转换为 String?

    node.js - CentOS 7 上的 Spectron headless 测试不起作用

    java - 在 fedora core 13 x86_64 下运行 eclipse 时出现问题 - 运行和退出时甚至没有启动画面

    java - 对于带有基元的每个循环修改

    javascript - for 循环和迭代器变量的作用域

    r - 优化 R 中的嵌套 For 循环

    docker - 标准_init_linux.go :219: exec user process caused: no such file or directory

    rust - 借用对结构中属性的引用