捕获环境
本课属于 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挑战
简单你会收到两个输入。第一个输入是表示原价的数字。第二个输入是表示折扣百分比的数字。创建一个闭包,从环境中捕获折扣百分比,并计算应用折扣后的最终价格。使用原价调用闭包,并打印最终价格。
要求:
- 读取第一个输入(原价)并去除空白
- 将其解析为
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);
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Rust 在线编译器