如何用匿名Lambda函数重写Rust中接收可变引用的递增函数?
用Rust闭包替代命名函数实现变量递增
你提供的示例代码里已经包含了正确的实现方式,只需要取消注释并调整格式即可。具体可运行代码如下:
fn main() { let mut n = 0; let mut inc = || n += 1; inc(); // 直接调用闭包递增n println!("n = {}", n); // 输出 "n = 1" inc(); println!("n = {}", n); // 输出 "n = 2" inc(); println!("n = {}", n); // 输出 "n = 3" }
关键说明:
- 闭包
|| n += 1会自动捕获外部变量n的可变引用(因为要修改n的值),这类闭包属于FnMuttrait类型,要求闭包本身必须是可变绑定,所以必须用let mut inc来声明闭包变量。 - 相比原来的命名函数,闭包通过捕获机制直接关联了目标变量
n,无需每次调用时手动传递可变引用,完全实现了你想要的简洁调用方式。
内容的提问来源于stack exchange,提问作者Arina Medvedeva
相关产品推荐
相关产品推荐

