gpt4 book ai didi

rust - 如何创建类似 Haskell 的函数依赖项

转载 作者:行者123 更新时间:2023-11-29 07:42:50 25 4
gpt4 key购买 nike

背景:我正在使用 nalgebra 库,我想创建一个表示多元正态分布的结构。数字和行类型由方阵类型唯一确定,所以我想这样写:

#[allow(non_snake_case)]
pub struct Multivar𝒩<M: SquareMat<N, V>> {
μ: V,
Σ: M,
}

如果我使用的是 Haskell,我会指定 MN 以及 V 之间的函数依赖关系。在 Rust 中执行此操作的最佳方法是什么?

最佳答案

虽然 Haskell 有两个东西来表达类型、基础和关联类型之间的这种关系,但 Rust 只有后者。 Rust 中的 Traits 可以包含类型成员,这些成员在实现位置被分配了具体的值,并且编译器认为它们是由 trait 的类型参数组合(包括 Self)唯一标识的。所以你需要像这样定义 SquareMat 特征:

trait SquareMat {
type N;
type V;
...
}

impl SquareMat for SomeStruct {
type N = Four;
type V = f64;
...
}

然后这个特性可以像这样使用:

#[allow(non_snake_case)]
pub struct Multivar𝒩<M: SquareMat> {
μ: M::V,
Σ: M,
}

如果你不控制 SquareMat,那么你就倒霉了——你不能在 trait 使用站点定义函数依赖,只能在 trait 声明站点,就像在 haskell 。

关于rust - 如何创建类似 Haskell 的函数依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30845261/

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