包龙星

来人!把方唐镜拖出去打一百大板!少一下都不行!

方唐镜

大人,您手不酸吗?要不您写个循环 (Loop) 让机器打?

第十一回:大刑伺候,Rust 循环

公堂之上,重复劳动最累人。Rust 提供了三种刑具(循环方式)来帮你自动执行重复任务:loop, while, 和 for

1. loop (无限循环 / 死刑)

loop 是最简单的循环,它会一直执行,直到你喊停(break)。

fn main() {
    let mut count = 0;
    
    loop {
        count += 1;
        println!("打了方唐镜第 {} 板!", count);
        
        if count == 100 {
            println!("行刑完毕,拖下去!");
            break; // 必须手动喊停,否则打到天荒地老
        }
    }
}

进阶技巧: loop 也可以作为表达式返回值!

let result = loop {
    count += 1;
    if count == 10 {
        break count * 2; // 循环结束,返回 count * 2
    }
};

2. while (有条件循环 / 缓刑)

只要条件满足,就一直打。条件不满足,立刻停手。

fn main() {
    let mut energy = 3; // 侍卫的体力
    
    while energy > 0 {
        println!("用力打!还剩体力:{}", energy);
        energy -= 1;
    }
    
    println!("侍卫累趴下了,退堂!");
}

3. for (遍历循环 / 挨个点名)

这是 Rust 最强大、最安全的循环。它可以遍历任何序列,绝不会越界。

fn main() {
    // 遍历数字范围 1 到 5 (包含 1,不包含 5)
    for i in 1..5 {
        println!("第 {} 号证人上堂!", i);
    }
    
    // 遍历数字范围 (包含 5)
    for i in 1..=5 {
        println!("包含第 {} 号!", i);
    }
    
    // 遍历数组
    let suspects = ["常威", "来福", "方唐镜"];
    for name in suspects.iter() {
        println!("带嫌犯:{}", name);
    }
}
雷豹

我全都要!能不能在循环里再套个循环?比如每个人打十板?

包龙星

当然可以!这就是嵌套循环。你还可以给循环起名字(标签),想跳出哪层跳哪层!

4. 循环标签 (精准打击)

fn main() {
    'outer: for person in ["常威", "来福"] {
        'inner: for i in 1..=3 {
            println!("打 {} 第 {} 下", person, i);
            if person == "常威" && i == 2 {
                println!("常威晕过去了,别打了!");
                break 'inner; // 只跳出内层循环,继续打来福
            }
        }
    }
}

动手时刻:复读机

方唐镜在公堂上一直喊 "我是冤枉的",喊了 10 遍。请用 for 循环帮他喊出来。

fn main() {
    // 你的代码
}
下一回:阅兵仪式(迭代器) →