如何让Rust函数接受任何浮点类型作为参数。

17

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

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

但我在文档中找不到它的语法,或者只适用于浮点数的特征。

1个回答

20

目前在 Rust 中使用原始数值类型的通用故事都可以在官方 num 包中找到。该包包含了许多特征,这些特征被实现为各种原始数字类型,并且特别地有一个代表浮点数的Float

Float 特征提供了许多适用于浮点数的方法,但它还扩展了 NumNumCast 特征,它们允许从任意原始数字执行数值操作并获得通用类型。使用 Float,你的代码可能会像这样:

use num::{Float, NumCast};

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

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


1
我可能做错了什么,但是 num 库似乎不再是官方库了,对吗?另外,numnum_traits 有什么关系,是否有理由更喜欢其中一个? - bluenote10
1
如果我记得正确,最初的“num”是从标准库中提取出来的,这就是我称之为“官方”的原因。我不认为它真正是官方的,就像“Rust开发人员支持的”。至于“num”和“num-traits”之间的区别,实际上在前者的自述文件中有描述: https://crates.io/crates/num。基本上,“num”重新导出了“num-traits”以及“num-*”系列中的其他箱子,如果您需要许多这些箱子,则非常有用。 - Vladimir Matveev

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