我得到了一个以下的部分生 rust 的代码,期望检查'range_a:RangeInclusive<>'包括'range_B:RangeInclusive<>',反之亦然。我不知道它是如何工作的,在某些情况下返回错误的结果。有人能解释一下吗?
fn contains_range(mut range_a: RangeInclusive<u32>, mut range_b: RangeInclusive<u32>) -> bool {
range_b.all(|i| range_a.contains(&i)) || range_a.all(|i| range_b.contains(&i))
}
fn main() {
dbg!(contains_range(15..=16, 15..=73));
}
字符串
我猜问题是RangeInclusive<>::all()
,但如果是的话,那么编译器应该在RangeInclusive<>::contains()
处有警告。
1条答案
按热度按时间ddhy6vgd1#
如果你把
dbg
调用分散到所有地方,你会注意到调用range_b.all
推进了range_b
,所以当你到达第二个测试时,range_b
已经变成了18..=73
:字符串
Playground
给出:
型
解决方案是在调用
all
之前克隆范围:型
Playground的