有没有一种特性可以指定数字功能?

39

我希望使用一个特质来限定泛型类型,就像这个假想的 HasSQRT

fn some_generic_function<T>(input: &T)
where
    T: HasSQRT,
{
    // ...
    input.sqrt()
    // ...
}
1个回答

35
您可以使用 num 或者 num-traits crates,并将您的泛型函数类型与 num::Floatnum::Integer 或其他相关 trait 绑定:
use num::Float; // 0.2.1

fn main() {
    let f1: f32 = 2.0;
    let f2: f64 = 3.0;
    let i1: i32 = 3;

    println!("{:?}", sqrt(f1));
    println!("{:?}", sqrt(f2));
    println!("{:?}", sqrt(i1)); // error
}

fn sqrt<T: Float>(input: T) -> T {
    input.sqrt()
}

30
@HosseinNoroozpour 使用依赖项。Rust与许多其他语言不同,包管理是内置的并被强烈支持。典型的例子就是随机数生成,这是在一个crate中提供的而不是标准库中提供的。 - Shepmaster
1
@HosseinNoroozpour,希望最小化依赖关系是可以理解的,但正如Shepmaster所说,Rust使依赖管理变得方便,以鼓励人们使用它们。此外,num包非常好维护,不会被放弃。 - Kroltan
4
我来自C++背景,那里添加每个依赖项都是一个让人害怕的决定。我猜只有与C库绑定的库是我应该避免添加的库,我正确吗? - Hossein Noroozpour
1
@HosseinNoroozpour 我会避免使用不是纯稳定 Rust 的依赖。 - Rainb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接