【发布时间】:2016-03-25 14:02:03
【问题描述】:
这是来自Rust by Example 的示例:
fn is_odd(n: u32) -> bool {
n % 2 == 1
}
fn main() {
println!("Find the sum of all the squared odd numbers under 1000");
let upper = 1000;
// Functional approach
let sum_of_squared_odd_numbers: u32 =
(0..).map(|n| n * n) // All natural numbers squared
.take_while(|&n| n < upper) // Below upper limit
.filter(|n| is_odd(*n)) // That are odd
.fold(0, |sum, i| sum + i); // Sum them
println!("functional style: {}", sum_of_squared_odd_numbers);
}
为什么take_while 的闭包通过引用获取它的参数,而所有其他的都通过值获取?
【问题讨论】:
-
take_while 和 filter 都收到一个引用。在本例中,在 take_while 中,引用被 |&n| 解构,而在 filter 中,引用被 *n 解引用。
标签: closures rust higher-order-functions