我试图理解多态性在使用具有关联类型的特征时是如何工作的。请考虑以下特征:
trait Animal {
fn talk (&self);
}
此特征由以下结构使用:
struct Dog;
struct Cow;
impl Animal for Dog {
fn talk (&self) {
println!("Woof");
}
}
impl Animal for Cow {
fn talk (&self) {
println!("Moo");
}
}
然后我在一个向量上循环
fn main() {
let animals: Vec<&Animal> = vec![&Dog, &Cow];
for animal in &animals {
animal.talk();
}
}
// output:
// Woof
// Moo
到目前为止还不错。现在,我将关联的类型
Food
添加到trait(该类型未使用,但仅用于最小的重现)。
struct Meat;
struct Herb;
trait Animal {
type Food;
...
}
impl Animal for Dog {
type Food = Meat;
...
}
impl Animal for Cow {
type Food = Herb;
...
}
现在我得到错误:
error[E0191]: the value of the associated type `Food` (from trait `Animal`) must be specified
--> src/main.rs:188:23
163 | type Food;
| ---------- `Food` defined here
...
188 | let animals: Vec<&Animal> = vec![&Dog, &Cow];
| ^^^^^^ help: specify the associated type: `Animal<Food = Type>`
但在这种情况下,我不能只关注错误消息,因为实现trait
动物
的结构
的数量不应该是静态的。
解决这个问题的最好方法是什么?预先感谢
这是运行时多态性(特征对象)的固有限制:您不知道具体类型,因此无法知道其关联类型。
如果你想创建一个可以调用
.talk()
的东西的向量,那么很容易为这个(playground)创建一个特征:
trait Talk {
fn talk(&self);
}
impl<A: Animal> Talk for A {
fn talk(&self) {
Animal::talk(self);
}
}
let animals: Vec<&dyn Talk> = vec![&Dog, &Cow];
您将
无法编写任何
通过
为什么trait中的泛型方法需要trait对象的大小?
- 什么使某物成为“特征对象”?
- 无法创建多态类型,因为trait无法制成对象
您可以创建一个具有相同关联类型的trait对象,比如< code>dyn Animal
²使用编译时多态性(泛型),您可以编写泛型的代码,而不是任何
Food
类型的动物
。但是您不能将不同编译时类型的东西放在Vec
中,所以这也没有帮助。
问题内容: 阅读了有关在地图中使用切片的相关问题之后,我对Go中的相等性感到好奇。 我知道有可能重写Java方法。有没有类似的方法来定义Go如何检查用户定义的类型/结构是否相等?如果是这样,将有一个针对上述问题的解决方法。我以为使用值可能会提供解决方案,但我收到了错误消息。 问题答案: Go支持相等性检查结构。 它不能与指针字段一起使用(按照您想要的方式),因为指针地址不同。 您无法修改相等运算符
本文向大家介绍JavaScript类型相关的常用操作总结,包括了JavaScript类型相关的常用操作总结的使用技巧和注意事项,需要的朋友参考一下 js的基本数据类型有哪些? ECMAScript中有5中简单数据类型(也称为基本数据类型): Undefined、Null、Boolean、Number和String。还有1中复杂的数据类型————Object,Object本质上是由一组无序的名值对组
问题内容: 我正在使用Swift 4并尝试解析一些JSON数据,这些数据显然在某些情况下对于同一键可能具有不同的类型值,例如: 和 我实际上坚持定义我的名字,因为我不知道如何处理这种情况,因为 抛出,自然, 相应地抛出。 定义我时如何处理这种(和类似的)情况? 问题答案: 尝试对Reddit列表JSON响应上的“已编辑”字段进行解码/编码时遇到了相同的问题。我创建了一个结构,该结构表示给定键可能存
问题内容: 例如,如果我的数据库中有以下表格,并且“学生和课程”具有多对多关系。 现在,如果我的模型如下 和 所以我的问题是,如果我仅创建这两个bean,我会遇到什么样的问题?我将面对什么样的问题以及在哪种情况下?并请为这么多对多的关系指定正确的bean结构。 问题答案: 您会遇到什么问题: 您将无法看到“学生-课程”关联 您将无法从课程导航到该课程的学生(反之亦然) 如果学生/课程表中有学生/课
什么叫关联线上课堂? 答: 基于中国大学 MOOC平台,利用慕课堂教学工具进行备课并开展 课堂教学,可汇总线上课程(mooc或spoc)的学习数据,称为 关联线上课堂,简称关联课堂。 什么叫独立线下课堂? 答: 基于中国大学 MOOC平台,不使用mooc或spoc课程,仅利用慕 课堂教学工具进行备课并开展课堂教学,称为独立线下课堂,简 称独立课堂。 哪些学校可以使用关联线上课堂? 答: 您所在的学