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

tim*_*lyo 9 generics polymorphism rust

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

fn multiply<F: Float>(floating_point_number: F){
    floating_point_number * 2
}
Run Code Online (Sandbox Code Playgroud)

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

Vla*_*eev 13

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

Floattrait提供了许多特定于浮点数的方法,但它也扩展NumNumCasttraits,允许执行数值运算并从任意原始数中获取泛型类型.随着Float你的代码看起来是这样的:

use num::{Float, NumCast};

fn multiply<F: Float>(n: F) -> F {
    n * NumCast::from(2).unwrap()
}
Run Code Online (Sandbox Code Playgroud)

NumCast::from()返回,Option因为不是所有的数字转换都有意义,但在这种特殊情况下它保证工作,因此我使用unwrap().

  • 我可能做错了什么,但“num”似乎不再是官方包了,对吧?另外,“num”与“num_traits”有何关系,是否有理由选择其中之一? (2认同)
  • @bluenote10如果我没记错的话,最初`num`是从标准库中提取的,这就是为什么我称它为“官方”。我不认为它是真正官方的“由 Rust 开发人员支持”。至于 num 和 num-traits 的区别,其实在前者的 readme 中有描述:https://crates.io/crates/num。基本上,“num”重新导出“num-traits”以及“num-*”系列中的其他板条箱,如果您需要其中很多,这非常有用。 (2认同)