gpt4 book ai didi

rust - 确保 rust 中的特征实现满足属性

转载 作者:行者123 更新时间:2023-11-29 08:28:43 25 4
gpt4 key购买 nike

我正在制作一个特征来定义度量空间中的距离,例如:

trait Metric<T> {
fn distance(o1: &T, o2: &T) -> f64;
}

我希望任何实现都满足某些属性,例如:

distance(o, o) = 0.0

在 rust 中是否存在强制执行此操作的方法?

最佳答案

您可以使用 trait_tests crate ,虽然我确实相信这个 crate 只是一个实验,所以可能会有粗糙的边缘。具体来说,我不知道如何实际测试 Metric<T> 的所有实现。 ,而不是仅针对具体类型,Metric<i32> .

以你的例子为例:

use trait_tests::*;

pub trait Metric<T> {
fn distance(o1: &T, o2: &T) -> f64;
}

#[trait_tests]
pub trait MetricTests: Metric<i32> {
fn test_distance() {
// These could possibly be extended using quickcheck or proptest
assert!(Self::distance(&42, &42) == 0.0);
}
}

struct CartesianPlane {}

#[test_impl]
impl Metric<i32> for CartesianPlane {
fn distance(o1: &i32, o2: &i32) -> f64 {
(*o2 - *o1) as f64
}
}

然后 cargo test应该包括为特征的实现者自动生成的测试,这些测试用 #[test_impl] 注释.

关于rust - 确保 rust 中的特征实现满足属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56981360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com