gpt4 book ai didi

closures - 为什么 `take_while` 的闭包通过引用来获取它的参数?

转载 作者:行者123 更新时间:2023-11-29 08:00:34 25 4
gpt4 key购买 nike

这是来自 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 的闭包通过引用获取其参数,而所有其他闭包通过值获取?

最佳答案

执行Iterator::take_while很有启发性:

fn next(&mut self) -> Option<I::Item> {
if self.flag {
None
} else {
self.iter.next().and_then(|x| {
if (self.predicate)(&x) {
Some(x)
} else {
self.flag = true;
None
}
})
}
}

如果从底层迭代器返回的值直接传递给谓词,那么该值的所有权也将转移。调用谓词后,如果谓词为真,则不再有值可从 TakeWhile 适配器返回!

关于closures - 为什么 `take_while` 的闭包通过引用来获取它的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36221430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com