gpt4 book ai didi

struct - 结构的复杂特征要求

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

我有一个相当复杂的特征设置,我很难把各个部分排列起来。现在它看起来大致像这样:

/// Trait for models which can be gradient-optimized.
pub trait Optimizable {
type Data;
type Target;

// The contract //
}

/// Trait for optimization algorithms.
pub trait OptimAlgorithm<M : Optimizable> {

// The contract //
}

现在我希望能够允许实现 OptimAlg​​orithm 的结构成为实现 Optimizable 的结构中的一个字段。这看起来像这样:

/// Model struct
pub struct Model<A: OptimAlgorithm<Self>> {
alg: A,
}

impl Optimizable for Model<A> {
...
}

这不起作用,因为结构上的 Self 引用是无意义的。我尝试为 OptimAlg​​orithm 使用关联类型,但我需要算法对模型具有通用性,所以这不起作用。是否有我遗漏的神奇语法,或者这是否需要大修?

编辑--

这是一个 minimal example如史蒂文的回答中所述,它显示错误 E0275。它更接近我的源代码,但不那么困惑。

最佳答案

只需使用 Model<A>而不是 Self . Self仅在需要能够引用实现该特征的具体类型的特征中才真正有用。在这里,具体类型始终是 Model<A> .

pub trait Optimizable {
type Data;
type Target;

// The contract //
}

/// Trait for optimization algorithms.
pub trait OptimAlgorithm<M: Optimizable> {

// The contract //
}
pub struct Model<A> where A: OptimAlgorithm<Model<A>> {
alg: A,
}

impl<A> Optimizable for Model<A>
where A: OptimAlgorithm<Model<A>>
{
type Data = ();
type Target = ();
}

根据您更新后的代码,生命周期似乎存在使用rust 问题。看起来你可以通过使用更高级别的生命周期来完成这项工作,但我不知道为什么。

pub trait Optimizable {
type Data;
type Target;

// The contract //
}

/// Trait for optimization algorithms.
pub trait OptimAlgorithm<M: Optimizable> {

// The contract //
}

pub struct Algorithm;

impl Default for Algorithm {
fn default() -> Algorithm { Algorithm }
}

impl<M: Optimizable> OptimAlgorithm<M> for Algorithm {

}


pub struct Model<'a, A> where for<'b> A: OptimAlgorithm<Model<'b, A>> {
layer_sizes: &'a [usize],
alg: A,
}

impl<'a, A> Model<'a, A>
where A: for<'b> OptimAlgorithm<Model<'b, A>>
{
pub fn new(layers: &'a [usize]) -> Model<Algorithm> {
Model {
layer_sizes: layers,
alg: Algorithm::default(),
}
}
}

impl<'a, A> Optimizable for Model<'a, A>
where A: for<'b> OptimAlgorithm<Model<'b, A>>
{
type Data = ();
type Target = ();
}

pub fn main() {
let layers = &[1usize,2,3];
let a = Model::<Algorithm>::new(layers as &[usize]);
}

关于struct - 结构的复杂特征要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34552927/

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