5

我有一个函数可以制作一个整数链表:

enum List<T> { Cons(T, ~List<T>), End }

fn range(start: int, end: int) -> ~List<int> {
    if start >= end { ~End }
    else { ~Cons(start, range(start+1, end)) }
}

但是,我想制作任何数字类型的范围,包括 uints、doubles 等。但是,例如,这不起作用:

fn range<T: ord>(start: T, end: T) -> ~List<T> {
    if start >= end { ~End }
    else { ~Cons(start, range(start+1, end)) }
}

产生:

> rustc list.rs
list.rs:3:12: 3:15 error: use of undeclared type name `ord`
list.rs:3 fn range<T: ord>(start: T, end: T) -> ~List<T> {
                      ^~~
error: aborting due to previous error

如何在 rust 中创建一个通用函数,限制自己可以被“数字”类型调用?不用自己专门写接口?我曾假设有许多标准库特征(例如手册第 6.2.1.1 节中列出的那些,如eq,ord等,尽管现在我想知道这些是否是适当的“特征”)我可以声明泛型函数时使用?

4

2 回答 2

4

特征通常是大写的。在这种情况下,它是 Ord。看看是否有帮助。

于 2013-06-10T05:43:24.087 回答
4

在当前的 master 中,有一个名为“Num”的特征,它是所有数字类型的通用特征。最近已经做了一些工作来统一许多常见的数学函数来处理这个特性,而不是 u8、f32 等。

有关上述 Num 特征,请参见https://github.com/mozilla/rust/blob/master/src/libstd/num/num.rs#L26 。

希望这可以帮助!

于 2013-06-13T17:12:40.187 回答