Rust:使用trait /类型类实现泛型数值函数



我有一个函数,它的工作是使一个整数链表:

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)) }
}

但是,我想创建任何数字类型的范围,包括单位、双精度等。但是,例如,这个不起作用:

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中创建一个通用函数,它限制了自己可以被"数字"类型调用?不需要自己专门编写接口?我曾假设有许多标准库特征(如eq, ord等手册第6.2.1.1节中列出的那些,尽管现在我想知道这些是否正确的"特征"),我可以在声明泛型函数时使用?

特征通常是大写的。

在当前的master中,有一个名为'Num'的trait,它是所有数字类型的通用trait。最近已经完成了一些工作,将许多常见的数学函数统一到这个特征上,而不是u8, f32等。

见https://github.com/mozilla/rust/blob/master/src/libstd/num/num.rs#L26上面提到的Num特性。

希望这对你有帮助!

最新更新