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-*
系列中的其他板条箱,如果您需要其中的许多板条箱,这非常有用。