gpt4 book ai didi

rust - 特征类型不匹配,解决了 `

转载 作者:行者123 更新时间:2023-12-03 11:49:19 25 4
gpt4 key购买 nike

我有一个特质,并且有两个实现此特质的结构。它们必须具有自己的属性。因此,我使用了关联的类型。但是enum需要确定关联类型的值。render方法必须返回View。我定义一个类型。一切正常,直到我决定在渲染方法中包括该组件。我得到一个错误

error[E0271]: type mismatch resolving `<Button as Render>::Props == AppProps`
--> src/lib.rs:39:17
|
39 | / Box::new(
40 | | Button::create(
41 | | ButtonProps {}
42 | | )
43 | | )
| |_________________^ expected struct `AppProps`, found struct `ButtonProps`
|
= note: required for the cast to the object type `dyn Render<Props = AppProps>`
pub enum View<T> {
View(Vec<View<T>>),
Render(Box<Render<Props = T>>),
}

pub trait Render {
type Props;
fn render(&self) -> View<Self::Props>;
fn create(props: Self::Props) -> Self
where
Self: Sized;
}

// -------- Button -----------

struct Button { props: ButtonProps }
struct ButtonProps { }

impl Render for Button {
type Props = ButtonProps;
fn create(props: Self::Props) -> Self {
Button { props }
}
fn render(&self) -> View<Self::Props> {
View::View(vec![])
}
}

// -------- App ------------

struct App { props: AppProps }
struct AppProps {}

impl Render for App {
type Props = AppProps;
fn render(&self) -> View<Self::Props> {
View::View(vec![
View::Render(
Box::new(
Button::create(
ButtonProps {}
)
)
)
])
}
fn create(props: Self::Props) -> Self {
App { props }
}
}

我认为编译器告诉我,想到了另一个用于返回和存储组件的方法。但是我想知道是否有任何方法可以克服这个问题。先感谢您。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d6cde99cb9deffcf911cbcb9d1229e46

更新
pub trait Render<P> {
//type Props;
fn render(&self) -> View;
fn create(props: P) -> Self
where
Self: Sized;
}

impl Render<Props> for App

此选项有效

最佳答案

似乎我应该从特征中删除关联的类型和构造函数,并让配置和构造成为普通方法。

关于rust - 特征类型不匹配,解决了 `<Button as Render>::Props == AppProps`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60913696/

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