当前位置: 首页 > 知识库问答 >
问题:

为“多态”回归而简单组织锈病性状

聂溪叠
2023-03-14
pub struct Frame<T> {
    grid_val: Vec<T>,
    grid_space: Vec<[T; 2]>,
    calculated_result: Option<Vec<T>>
}
pub struct Sphere<T> {
    grid: Frame<T>,
    radius: T
}

pub struct Hyperbola<T> {
    top_grid: Frame<T>,
    bottom_grid: Frame<T>,
    internal_angle: T
}
pub trait Algorithm<T> {
    fn calculate_something(&self) -> Result<Sphere<T>, Error>
}

impl Algorithm<T> for Hyperbola {
    // do things with top_grid, bottom_grid, and internal_angle
}

impl Algorithm<T> for Sphere {
    // do things with grid and radius
}

我知道我可以添加另一个像GeometricObject这样的特性,并添加另一层组合,但这似乎太过分了。我想我也许可以使用,但这似乎很笨拙。

我还想过让calculate_something返回一个vec 手动插入到正在使用的任何结构中,但这样就破坏了返回调用方法的相同结构类型的人机工程学(这在公共impl/trait中是一种浪费)。

我怎样才能把它组织起来,而不使它的特性一直下降?

共有1个答案

庄嘉
2023-03-14

显示您需要关联的类型:

pub trait Algorithm<T> {
    type Output;

    fn calculate_something(&self) -> Result<Self::Output, Error>;
}

impl<T> Algorithm<T> for Sphere<T> {
    type Output = Sphere<T>;

    fn calculate_something(&self) -> Result<Self::Output, Error> {
        unimplemented!()
    }
}

impl<T> Algorithm<T> for Hyperbola<T> {
    type Output = Hyperbola<T>;

    fn calculate_something(&self) -> Result<Self::Output, Error> {
        unimplemented!()
    }
}

关联类型在Rust编程语言中有详细描述。我强烈建议阅读整本书,以了解Rust提供的功能类型。

另一种解决方案是在该特征上定义另一个泛型类型:

pub trait Algorithm<T, Out = Self> {
    fn calculate_something(&self) -> Result<Out, Error>;
}

impl<T> Algorithm<T> for Sphere<T> {
    fn calculate_something(&self) -> Result<Sphere<T>, Error> {
        unimplemented!()
    }
}

impl<T> Algorithm<T> for Hyperbola<T> {
    fn calculate_something(&self) -> Result<Hyperbola<T>, Error> {
        unimplemented!()
    }
}
 类似资料:
  • 我有以下Rust游乐场永久墨水 如果我从这样的问题中理解正确的话,那么由于泛型是单态的,Rust运行时就不可能泄漏出的适当方法,假设每个实现的类型表面上可能有一个不同的方法?这对我来说并不是很好,因为在与Rust运行时相同的位置上,我似乎可以查看我手头上的实现器,比如和我将查看的vtable。你能解释一下我错在哪里吗? 从那里,我尝试简单地与编译器战斗,并进入静态分派。第17-21行 变成了

  • 我正在尝试制作VGA文本动画的操作系统,但它的处理速度非常快。 所以,我想做“等待”功能,每次等待100毫秒,但我不知道如何不用std板条箱。 那么问题是,我如何在没有性病的情况下睡觉/等待生锈? 谢谢

  • 本文向大家介绍scikit-learn线性回归,多元回归,多项式回归的实现,包括了scikit-learn线性回归,多元回归,多项式回归的实现的使用技巧和注意事项,需要的朋友参考一下 匹萨的直径与价格的数据 训练模型 预测一张12英寸匹萨价格:$13.68 一元线性回归假设解释变量和响应变量之间存在线性关系;这个线性模型所构成的空间是一个超平面(hyperplane)。 超平面是n维欧氏空间中余维

  • 本文向大家介绍python实现简单的单变量线性回归方法,包括了python实现简单的单变量线性回归方法的使用技巧和注意事项,需要的朋友参考一下 线性回归是机器学习中的基础算法之一,属于监督学习中的回归问题,算法的关键在于如何最小化代价函数,通常使用梯度下降或者正规方程(最小二乘法),在这里对算法原理不过多赘述,建议看吴恩达发布在斯坦福大学上的课程进行入门学习。 这里主要使用python的sklea

  • 通过遵循GEKKO文档,我使用了线性和多项式回归的示例。这里是关于简单线性回归的部分。 我只是想知道为什么不评论这些行会得到不同的结果 文件中获得的结果(线性、二次、三次)似乎不是最小二乘法。在这些情况下使用了什么样的最小化标准? 向你问好,拉多万

  • 我的模型像一样简单,但我无法以简单的方式获得正确的结果。我不知道发生了什么。 当验证损失很大时,我的模型总是停止: 纪元901/2000 5/5[============>===>-0s 3ms/步-损失:14767.1357-val_loss:166.8979 在训练参数后,我不断变得不合适: [ 请帮我找出我的代码有什么问题。 我使用tensorflow-v2.3.0