Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Rust中定义泛型整数类型的无限范围?_Rust_Iterator - Fatal编程技术网

如何在Rust中定义泛型整数类型的无限范围?

如何在Rust中定义泛型整数类型的无限范围?,rust,iterator,Rust,Iterator,我有一个通用类型T,它实现了num::Integer特性。我可以编写一个基于T的范围迭代器,其中e表示表示范围上限的T类型的另一个值: num::iter::range(T::one(), e) 令人恼火的是,它必然是有界的。我怎么能有一个无限的范围?对于基本类型,我可以执行类似于(1..)的操作。我可以做一些类似于num::iter::range(T::one(),T::infinity())的事情吗 我在num::iter中找不到这样做的函数。我希望以后能够调用函数式函数,如map,fil

我有一个通用类型
T
,它实现了
num::Integer
特性。我可以编写一个基于
T
的范围迭代器,其中
e
表示表示范围上限的
T
类型的另一个值:

num::iter::range(T::one(), e)
令人恼火的是,它必然是有界的。我怎么能有一个无限的范围?对于基本类型,我可以执行类似于
(1..)
的操作。我可以做一些类似于
num::iter::range(T::one(),T::infinity())
的事情吗


我在
num::iter
中找不到这样做的函数。我希望以后能够调用函数式函数,如
map
filter
等。

这听起来像是
循环的用例,而不是范围。

编辑:不幸的是,
std::ops::RangeFrom
是一个结构,不像
std::ops
中中缀运算符的特征。所以这是错误的,但由于它已被接受,我不能删除它


原始帖子:您可以为您的类型实现。这是范围语法的基本特征,只有一个下限,例如
1..

大多数整数类型(例如
u8
i32
)不能表示“无限”的概念。迭代器如
(0u8..)
将死机(调试模式)或自动换行(发布模式)。您实际上想要解决什么问题?可以使用,T::max_值。但我也不明白这一点。假设我想在t上有一些函数代码,并使用
itertools
中的
take\u while\u ref
来指定一个自定义终止条件,该条件可能很复杂,我不能/会懒得估计上界,并且假设t不像BigInt那样有界。我能做到吗?除了努力编写漂亮的代码之外,我没有什么特别的目标。我在想象可能的情况。如果take_while_ref已经指定了一个停止标准,那么仅仅因为我不知道如何不指定它就添加一个上限会让人感觉很难受。你是否以某种方式解决了这个问题?我想约束自己使用函数式编程风格,并使用
map
fold
filter
之类的东西,我想你说的是命令式循环。我错了吗?如果我们总是要做祈使句并使用循环,那么我的问题就变成了为什么
在\u ref
存在的时候取\u?是的,这也是我的结论。出于某种原因,num::BigInt似乎没有实现任何范围,num::iter缺少RangeFrom
RangeFrom
并不是一个特性。所有范围背后的基本特征是,这还不稳定。