- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码
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
, 只到 &T
或 T
,因此您需要以某种方式取消引用闭包参数。有两种方法,首先,如您所见,您可以使用取消引用模式:
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/
我在一个 twig 模板中使用 Assetic 来指定要从我的包中使用的 2 个 JS 文件 { % javascripts '@JiraExtendedReportsBund
我正在做一个 VS 包,它在菜单中有一个 DynamicItemStart 按钮。我在 VS 启动时加载动态按钮的内容没有任何问题,但我试图在某些事件(例如打开项目)之后向其内容添加更多命令。我将新命
需求是从plsql调用java方法,我可以通过loadjava命令来实现它。我遵循的步骤是: 第 1 步:创建 Java Class/jar 文件并将其放置在 Unix 机器上 第2步:将Java C
我是一名优秀的程序员,十分优秀!