我有一个函数,它的工作是使一个整数链表:
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特性。
希望这对你有帮助!