【发布时间】:2022-01-05 06:53:15
【问题描述】:
有两个数字的输入数据,我需要构造一个迭代器或一个范围并进一步传递它:
// ordering is not strictly defined
let x1: usize = 4;
let x2: usize = 2;
let mut x_range = ...;
if x1 < x2 {
x_range = (x1..=x2);
}
else {
// i.e if we have ((x1, x2) == (3,1) it should produce 3,2,1 sequence.
x_range = (x2..=x1).rev();
}
for x in x_range {
// do something
}
问题是正则范围表达式和rev()产生的两个范围变体具有不同的类型,并在代码中进一步抛出类型错误。
所以我尝试定义范围。
let mut x_range: std::ops::Range<usize>;
但是收到= note: expected struct std::ops::Range<usize> found struct RangeInclusive<usize>的错误:
然后我尝试定义一个迭代器,然后用into_iter() 转换范围。
let mut x_range: dyn Iterator<usize>;
但后来我收到了doesn't have a size known at compile-time
那么有没有办法将迭代器的抽象父接口或范围传递给其他函数?
【问题讨论】:
-
这能回答你的问题吗? stackoverflow.com/questions/70238996/…
-
是的,这应该可以解决问题!虽然我认为没有来自 Cormac 答案的外部板条箱的香草方式是可取的。
标签: rust