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

Generics 如何使Rust函数接受任何浮点类型作为参数,generics,polymorphism,rust,Generics,Polymorphism,Rust,我希望编写一个可以接受任何浮点数据的函数,类似于以下形式: fn乘法(浮点数:F)->F{ 浮点数*2 } 但是我在文档中找不到它的语法,也找不到一个只适用于浮点数的特性。目前,所有带有Rust原始数字类型的通用故事都可以在官方的板条箱中找到。这个板条箱包含许多特性,这些特性是为各种原始数字类型实现的,尤其是代表浮点数的特性 Floattrait提供了许多特定于浮点数的方法,但它也扩展了和trait,允许执行数值运算并从任意原始数中获取泛型类型。使用Float时,您的代码可能如下所示: use

我希望编写一个可以接受任何浮点数据的函数,类似于以下形式:

fn乘法(浮点数:F)->F{
浮点数*2
}

但是我在文档中找不到它的语法,也找不到一个只适用于浮点数的特性。

目前,所有带有Rust原始数字类型的通用故事都可以在官方的板条箱中找到。这个板条箱包含许多特性,这些特性是为各种原始数字类型实现的,尤其是代表浮点数的特性

Float
trait提供了许多特定于浮点数的方法,但它也扩展了和trait,允许执行数值运算并从任意原始数中获取泛型类型。使用
Float
时,您的代码可能如下所示:

use num::{Float, NumCast};

fn multiply<F: Float>(n: F) -> F {
    n * NumCast::from(2).unwrap()
}
使用num::{Float,NumCast};
fn乘(n:F)->F{
n*NumCast::from(2).unwrap()
}

NumCast::from()
返回
选项
,因为并非所有的数值类型转换都有意义,但在这种特殊情况下它保证工作,因此我使用了
unwrap()

我可能做错了什么,但
num
似乎不再是一个正式的板条箱,对吗?还有,
num
num\u traits
有什么关系,有什么理由喜欢一个而不是另一个吗?@bluenote10如果我没记错的话,最初
num
是从标准库中提取的,这就是为什么我称它为“官方”。我不认为这是真正的官方,因为在“由铁锈开发者支持”。至于
num
num traits
之间的区别,实际上在前者的自述中有描述:。基本上,
num
重新导出
num traits
以及
num-*
系列中的其他板条箱,如果您需要其中的许多板条箱,这非常有用。