// 什么是匿名函数?
// 1. 匿名函数可以获取到其所在作用域的所有变量名的引用.
// 2. 这些引用可以是不可变引用也可以是可变引用, 如果是可变引用则需要在变量名和匿名函数名前面声明mut.
// 普通函数不能获取其所在的scope的任何变量.
// 备注: 错误代码, 需注释掉才能运行整个代码文件.
fn normal_function_can_not_outside_scope_variables() {
let fn_name = "normal_function_can_not_outside_scope_variables";
let b = "hello";
fn plus_one(x: i32) -> i32 {
println!("{}: {}", fn_name, b); // 在函数中读取外部变量, 是不可行的, 因此会报错.
x + 1
}
println!("{}: {}", fn_name, plus_one(10));
}
// 匿名函数允许获取其所在的scope的所有变量.
fn anonymous_function_can_get_outside_scope_variables() {
let fn_name = "anonymous_function_can_get_outside_scope_variables";
let b = String::from("hello");
let plus_one = |x| {
println!("{}: {}", fn_name, b); // 在匿名函数中读取外部变量, 是可行的.
x + 1
};
println!("{}: {}: {}", fn_name, plus_one(10), b);
}
fn anonymous_function_change_outside_scope_variables() {
let fn_name = "anonymous_function_change_outside_scope_variables";
let mut b = String::from("hello");
let plus_one = || {
b.push_str(" world!"); // 在匿名函数中更改外部变量, 是可行的.
b
};
let c = plus_one();
println!("{}: {}", fn_name, c);
}
fn main() {
// normal_function_can_not_outside_scope_variables();
anonymous_function_can_get_outside_scope_variables();
anonymous_function_change_outside_scope_variables();
}
rust--什么是匿名函数?
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 之前在学编译原理的时候接触过闭包这个概念,就是一组数据中所有数据的任意组合为闭包,然而突然看到与匿名函数放在一起了...