带参数的闭包
本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 61 课,共 66 课。
不带参数的闭包很有用,但大多数时候,你会想把数据传入闭包,让它们更灵活、更强大。给闭包添加参数的方式与你之前学过的相同,只是要在竖线内写入值。
下面介绍如何定义一个接受一个参数的闭包:
let add_one = |x: i32| x + 1;注意,参数 x 放在竖线之间,就像函数参数一样。然后,你可以传入一个值来调用这个闭包:
let add_one = |x: i32| x + 1;
let result = add_one(5); // result 的值是 6对于有多个参数的闭包,用逗号分隔它们:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // result 是 12挑战
简单你会收到两个输入。第一个输入是一个数字,第二个输入也是一个数字。创建一个接收两个参数并计算幂的闭包(第一个参数的值作为底数,第二个参数的值作为指数)。将闭包存储在一个变量中,使用输入值调用它,并打印结果。
要求:
- 读取第一个输入(底数)并去除空白
- 将其解析为
i32 - 读取第二个输入(指数)并去除空白
- 将其解析为
u32 - 创建一个接收两个参数并使用
.pow()方法计算幂的闭包 - 将闭包存储在一个变量中
- 使用两个输入值调用闭包
- 打印结果
输入:
- 第一行:一个底数(例如,
2) - 第二行:一个指数(例如,
3)
输出:
- 幂运算的结果
亲手试试
use std::io;
fn main() {
// 读取第一个输入(底数)
let mut base_input = String::new();
io::stdin().read_line(&mut base_input).expect("Failed to read line");
let base: i32 = base_input.trim().parse().expect("Invalid number");
// 读取第二个输入(指数)
let mut exp_input = String::new();
io::stdin().read_line(&mut exp_input).expect("Failed to read line");
let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
// TODO: 创建一个计算乘方的闭包,并将其存入变量
// TODO: 用 base 和 exponent 调用这个闭包
// 打印结果
println!("{}", result);
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Rust 在线编译器