我正在尝试在Rust中编写一个"模糊比较"函数.
这是一个例子:
fn fuzzy_cmp(a: f64, b: f64, tolerance: f64) -> bool {
a >= b - tolerance && a <= b + tolerance
}
Run Code Online (Sandbox Code Playgroud)
我在将其转换为通用版本时遇到问题.是否存在对自然点和浮点数进行分组的特征,同时允许对它们执行算术运算?像这样的东西:
fn fuzzy_cmp<T: Numbers>(a: T, b: T, tolerance: T) -> bool {
a >= b - tolerance && a <= b + tolerance
}
Run Code Online (Sandbox Code Playgroud)
我想在以下情况下使用此功能:
fuzzy_cmp(x, 20u64, 5u64)
fuzzy_cmp(y, 20f64, 5f64)
// ... etc
Run Code Online (Sandbox Code Playgroud)
我已经尝试了Ord特性,但它不起作用:
28:23 error: binary operation `-` cannot be applied to type `T`
a >= b - tolerance && a <= b + tolerance
^~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
Trait core::num::Num似乎已被弃用,所以我甚至都没有尝试使用它.
您不需要指定T应该是内置数字类型,只需要它必须支持公式所需的加法,减法和比较特征:
fn fuzzy_cmp<T: Add<T, T> + Sub<T, T> + PartialOrd>(a: T, b: T, tolerance: T) -> bool {
a >= b - tolerance && a <= b + tolerance
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |