typeclass - Rust:使用特征/类型类来实现通用数字函数

标签 typeclass traits rust

我有一个函数可以创建一个整数链表:

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

但是,我想制作任何数字类型的范围,包括 uint、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 中创建一个通用函数,它限制自己可以被“数字”类型调用?无需自己专门编写接口(interface)?我曾假设有许多标准库特征(例如手册第 6.2.1.1 节中列出的特征,如 eqord 等,尽管现在我我想知道这些是否是我在声明泛型函数时可以使用的适当“特征”?

最佳答案

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

关于typeclass - Rust:使用特征/类型类来实现通用数字函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17017250/

相关文章:

haskell - 'fmapDefault' 中的 'Data.Traversable' 有什么意义?

rust - 我可以使用 Deref<Target = Other> 从 Other 继承特征实现吗?

PHP Traits 命名约定?

rust - 遍历多维 BTreeMap

rust - 不可变字段和生命周期不匹配

rust - 使用函数装饰时,如何将 App 数据传递给 actix-web 中的服务路由处理函数?

Haskell 即席多态性

haskell - 泛型 - 创建组合所有字段的记录产品

haskell - 无法从上下文中推导出 (Eq a) (...)

generics - 将 Arc<RwLock<T>> 转换为 Arc<RwLock<TraitObject>