gpt4 book ai didi

rust - % 运算符在闭包内出错

转载 作者:行者123 更新时间:2023-11-29 07:46:08 24 4
gpt4 key购买 nike

这段代码

let vec = vec![1, 3, 4, 5, 6];
for i in vec.iter().filter(|x| x % 2 == 0) {
println!("{}", i);
}

产生错误

<anon>:4:36: 4:37 error: binary operation `%` cannot be applied to type `&&_` [E0369]
<anon>:4 for i in vec.iter().filter(|x| x % 2 == 0) {
^

我无法理解这个错误的含义。这与编译器如何创建匿名闭包结构有关吗?

以下代码似乎有效。

for i in vec.iter().filter(|&x| x % 2 == 0) {

最佳答案

不,这与闭包结构的创建方式无关,这是一个简单的类型错误。

vec.iter() , 当 vec: Vec<T> , 返回一个迭代器,它产生对其元素的引用。 filter()闭包还通过引用接受每个元素(因为否则元素将被消耗,但这将破坏 filter() 的全部目的)。因此,在 vec.iter().filter(|x| ...)闭包参数 x类型为 &&T ,在你的情况下,&&i32 .

Rust 数字运算符不能应用于 &&T , 只到 &TT ,因此您需要以某种方式取消引用闭包参数。有两种方法,首先,如您所见,您可以使用取消引用模式:

vec.iter().filter(|&x| x % 2 == 0)
// or even
vec.iter().filter(|&&x| x % 2 == 0)

解引用模式自动解引用它匹配的引用:

&x: &&i32   ==>  x: &i32
&&x: &&i32 ==> x: i32

或者,您可以直接取消引用该数字:

vec.iter().filter(|x| *x % 2 == 0)
// or
vec.iter().filter(|x| **x % 2 == 0)

关于rust - % 运算符在闭包内出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31260631/

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