繁体   English   中英

Rust:使用traits / typeclasses实现通用数字函数

[英]Rust: using traits/typeclasses to implement a generic numeric function

我有一个函数,可以创建一个整数的链接列表:

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,double等。 但是,例如,这不起作用:

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节中列出的那些特征,如eqord等,但现在我想知道这些特征是否属于正确的“特征”)我可以在声明泛型函数时使用它?

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

在当前的master中,有一个名为'Num'的特征,它作为所有数字类型的一般特征。 最近已经完成了工作以统一许多常见的数学函数来处理这个特性而不是u8,f32等。

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

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM