如何使Rust函数接受任何浮动类型作为参数

时间:2016-03-15 14:03:21

标签: generics polymorphism rust

我正在寻找一个可以接受任何浮点数据的函数,类似于以下形式:

fn multiply<F: Float>(floating_point_number: F){
    floating_point_number * 2
}

但是我无法在文档中找到它的语法,或者只是浮点数常见的特征

1 个答案:

答案 0 :(得分:13)

目前,Rust中的原始数字类型的所有通用故事都可以在官方num包中找到。除其他外,此包中包含为各种原始数字类型实现的许多特征,特别是Float表示浮点数。

Float trait提供了许多特定于浮点数的方法,但它还扩展了NumNumCast个特征,这些特征允许一个人执行数值运算并获得泛型类型来自任意原始数字。使用Float,您的代码可能如下所示:

use num::{Float, NumCast};

fn multiply<F: Float>(n: F) -> F {
    n * NumCast::from(2).unwrap()
}

NumCast::from()会返回Option,因为并非所有数字广播都有意义,但在这种特殊情况下保证会有效,因此我使用了unwrap()