我试图写一个"模糊比较"在Rust中的功能。
以下是一个例子:
fn fuzzy_cmp(a: f64, b: f64, tolerance: f64) -> bool {
a >= b - tolerance && a <= b + tolerance
}
我在将其转换为通用版本时遇到问题。是否存在对自然点和浮点数进行分组的特征,同时允许对它们执行算术运算?像这样:
fn fuzzy_cmp<T: Numbers>(a: T, b: T, tolerance: T) -> bool {
a >= b - tolerance && a <= b + tolerance
}
我想在以下情况下使用此功能:
fuzzy_cmp(x, 20u64, 5u64)
fuzzy_cmp(y, 20f64, 5f64)
// ... etc
我已经尝试了Ord
特质,但它不起作用:
28:23 error: binary operation `-` cannot be applied to type `T`
a >= b - tolerance && a <= b + tolerance
^~~~~~~~~~~~~
Trait core::num::Num
似乎已被弃用,所以我甚至都没有尝试使用它。
答案 0 :(得分:5)
您不需要指定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
}