- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
借用检查器让我很难找到一个优雅的实现。这是一个最小的例子:
use std::collections::VecDeque;
fn main() {
let mut vec1 = VecDeque::new();
vec1.push_back(2.);
let mut vec2 = VecDeque::new();
vec2.push_back(1.);
while let (Some(x), Some(y)) = (vec1.front_mut(), vec2.front_mut()) {
if x < y {
*y -= *x;
vec1.pop_front();
} else {
*x -= *y;
vec2.pop_front();
}
}
assert_eq!(vec2.len(), 0);
assert_eq!(vec1.pop_front(), Some(1.));
}
这不会编译:
error[E0499]: cannot borrow `vec1` as mutable more than once at a time
--> src/main.rs:13:13
|
10 | while let (Some(x), Some(y)) = (vec1.front_mut(), vec2.front_mut()) {
| ---- first mutable borrow occurs here
...
13 | vec1.pop_front();
| ^^^^ second mutable borrow occurs here
...
18 | }
| - first borrow ends here
error[E0499]: cannot borrow `vec2` as mutable more than once at a time
--> src/main.rs:16:13
|
10 | while let (Some(x), Some(y)) = (vec1.front_mut(), vec2.front_mut()) {
| ---- first mutable borrow occurs here
...
16 | vec2.pop_front();
| ^^^^ second mutable borrow occurs here
17 | }
18 | }
| - first borrow ends here
if x < y
范围必须嵌套在 x
中和 y
的范围,那么我怎么才能改变 vec1
/vec2
以他们的第一个元素为条件?
最佳答案
你可以这样做:
use std::collections::VecDeque;
fn main() {
let mut vec1 = VecDeque::new();
vec1.push_back(2.);
let mut vec2 = VecDeque::new();
vec2.push_back(1.);
loop {
let pop_vec1;
if let (Some(x), Some(y)) = (vec1.front_mut(), vec2.front_mut()) {
if x < y {
*y -= *x;
pop_vec1 = true;
} else {
*x -= *y;
pop_vec1 = false;
}
} else {
break;
}
if pop_vec1 {
vec1.pop_front();
} else {
vec2.pop_front();
}
}
assert_eq!(vec2.len(), 0);
assert_eq!(vec1.pop_front(), Some(1.));
}
或者如果您更喜欢行数较少的循环:
loop {
let pop_vec1 = match (vec1.front_mut(), vec2.front_mut()) {
(Some(ref x), Some(ref mut y)) if x < y => { **y -= **x; true },
(Some(x), Some(y)) => { *x -= *y; false },
_ => break,
};
VecDeque::pop_front(if pop_vec1 { &mut vec1 } else { &mut vec2 });
}
不是很优雅,但它有效。
VecDeque
缺少一个方法 like Vec::drain_filter
.也许 Rust 团队会添加它。
关于rust - 以内容为条件的流行元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47753068/
我想知道是否有一个“标准”类(JDK、Guava、Apache *)可以帮助延迟初始化/计算模式? 我正在考虑这样的事情(现在让我们忽略同步): abstract class Lazy { T i
我要创建一个从 html 到某种格式的转换器。我正在考虑使用中间格式 XML(XSL-FO)。 我的问题:如果没有那么多应用程序渲染它,为什么 FO 格式很受欢迎? 最佳答案 我很清楚 CSS 和 X
我发现了 IDEF就在昨天,我立即想知道为什么它不比 UML 更流行。从documents来看,IDEF 至少与 UML 一样适用于软件建模,但与 UML 相比,它已经成熟和稳定了大约 30 年。 这
首先,对于版主来说,如果这不是发布此内容的正确位置,请不要生气:)。 我想知道是否有类似 TodoMVC 的东西适用于 Django、Rails、Symfony 等流行的 Web 框架。 如果没有这样
在我的应用程序中,我有一个 UIScrollView,其中包含 N 个可以向左或向右滑动的 ViewController 在每个 Controller 中,我希望能够推送新的 viewControll
我是一名优秀的程序员,十分优秀!