gpt4 book ai didi

generics - "no field on type"泛型类型实现错误

转载 作者:行者123 更新时间:2023-12-03 08:04:54 25 4
gpt4 key购买 nike

我正在尝试制作一个项目,但由于不断弹出的错误,我无法取得进展。我试图将其抽象化,以便为您提供一个更简单的示例。谁能告诉我为什么在 get_value 函数中,在 Element 的实现中,无法获取 Element 的值。应该是吧?因为我明确表示该实现是针对 Element 的...

struct Element<T> {
value: T,
}

trait HasValue<T> {
fn get_value(&self) -> T;
}

impl<Element> HasValue<Element> for Element {
fn get_value(&self) -> Element {
self.value // Error!
}
}
error[E0609]: no field `value` on type `&Element`
--> src/lib.rs:11:14
|
9 | impl<Element> HasValue<Element> for Element {
| ------- type parameter 'Element' declared here
10 | fn get_value(&self) -> Element {
11 | self.value // Error!
| ^^^^^

最佳答案

Element不是Element 。也就是这个Element :

struct Element<T> {
// ^^^^^^^

和这些不一样Element s:

impl<Element> HasValue<Element> for Element {
// ^^^^^^^ ^^^^^^^ ^^^^^^^
fn get_value(&self) -> Element {
// ^^^^^^^

第一个是一个具体的(好吧,通用的)结构,名称为 Element 。第二个是名称为 Element 的通用参数。 ,可以是结构 Element但也可以是任何其他类型,例如 i32String 。您可以重命名其中一个而不影响另一个。

泛型参数遮蔽结构,因为它具有相同的名称,并且位于implElement将引用它而不是结构。因为它可以是任何类型,所以不一定有 value字段 - 因此编译器会提示。

我想你真正想要的不是“对于任何类型”,而是“对于任何Element<T>类型”。即只有T应该是通用的,而不是类型本身。要表达你应该这样写:

impl<T> HasValue<T> for Element<T> {
fn get_value(&self) -> T {
self.value
}
}

现在您将收到另一个错误,因为您正在移动 self.value ,但那是另一回事。

关于generics - "no field on type"泛型类型实现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72699871/

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