Menu
CoddyTech

捕获环境

本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 62 课,共 66 课。

闭包最强大的特性之一,是能够捕获并使用周围环境中的变量。与普通函数不同,闭包可以“看到”并访问定义它们的同一作用域中的变量。

环境捕获的工作原理如下:

fn main() {
    let x = 10;
    
    let my_closure = || {
        println!("The value of x is: {}", x);
    };
    
    my_closure(); // 这会打印 "The value of x is: 10"。
}

在这个示例中,闭包捕获了外部作用域中的变量 x,并在其主体中使用它。闭包不需要将 x 作为参数传入,它可以自动访问它。

你还可以捕获变量,并在计算中使用它们:

let multiplier = 3;
let multiply_by_three = |num| num * multiplier;
let result = multiply_by_three(5); // result 的值是 15
challenge icon

挑战

简单

你会收到两个输入。第一个输入是表示原价的数字。第二个输入是表示折扣百分比的数字。创建一个闭包,从环境中捕获折扣百分比,并计算应用折扣后的最终价格。使用原价调用闭包,并打印最终价格。

要求:

  • 读取第一个输入(原价)并去除空白
  • 将其解析为 f64
  • 读取第二个输入(折扣百分比)并去除空白
  • 将其解析为 f64
  • 创建一个接收一个参数(原价)的闭包,并从外围环境中捕获折扣百分比
  • 闭包应使用以下公式计算最终价格:base_price - (base_price * discount / 100.0)
  • 使用原价调用闭包
  • 打印最终价格

输入:

  • 第一行:原价(例如,100.0)
  • 第二行:折扣百分比(例如,20.0)

输出:

  • 应用折扣后的最终价格

亲手试试

use std::io;

fn main() {
    // 读取原价
    let mut base_price_input = String::new();
    io::stdin().read_line(&mut base_price_input).expect("Failed to read line");
    let base_price: f64 = base_price_input.trim().parse().expect("Invalid number");
    
    // 读取折扣百分比
    let mut discount_input = String::new();
    io::stdin().read_line(&mut discount_input).expect("Failed to read line");
    let discount: f64 = discount_input.trim().parse().expect("Invalid number");
    
    // TODO: 创建一个捕获折扣值并计算最终价格的闭包
    // TODO: 用原价调用这个闭包
    
    // 输出最终价格
    // println!("{}", final_price);
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Rust 在线编译器