我之前也在想,Rust 闭包函数好像没有什么意思,因为闭包函数并不能递归调用,而普通函数又需要手动传参数。对于懒得手动传参这件事情请理解,没办法,JS 函数太自由了。而多数时,闭包函数并不是单独存在的,而是直接当作参数,如 for_each():fn main() { { fn log(v: i32) { println!("{}", v); } (0..5).for_each(log); } // 闭包形式,简洁 { (0..5).for_each(|v| println!("{}", v)); } }可以观察到的是,使用闭包,就不需要先声明函数和声明参数了,而是直接使用即可。当然,若是一个以变量形式存在的闭包函数,则可以公用化:fn main() { let log = |v| println!("{}", v); { (0..5).for_each(log); } { (5..9).for_each(log); } }但并不是特别好使,因为闭包函数的参数会固定一种类型:fn main() { let log = |v| println!("{}", v); { (0..9).for_each(log); } { // Error ('a'..'z').for_each(log); } }或许也会想说,这不就是 lambda 表达式嘛,没问题,这也是一个别称。
我之前也在想,Rust 闭包函数好像没有什么意思,因为闭包函数并不能递归调用,而普通函数又需要手动传参数。
而多数时,闭包函数并不是单独存在的,而是直接当作参数,如
for_each()
:可以观察到的是,使用闭包,就不需要先声明函数和声明参数了,而是直接使用即可。
当然,若是一个以变量形式存在的闭包函数,则可以公用化:
但并不是特别好使,因为闭包函数的参数会固定一种类型:
或许也会想说,这不就是 lambda 表达式嘛,没问题,这也是一个别称。