簡體   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