我试图在Vec中存储具有共同特征的不同结构
游乐场
fn main()
{
let p = TheirPoint ...
let l = TheirLine ...
let vec_shapes: Vec<Box<dyn TheirShadow>> = vec![Box::new(l), Box::new(p)];
}
impl TheirShadow for TheirPoint {
type Output = (TheirPoint, TheirPoint);
...
}
impl TheirShadow for TheirLine {
type Output = (TheirPoint, TheirPoint, TheirPoint, TheirPoint);
...
}
pub trait TheirShadow {
type Output;
...
}
error[E0191]: the value of the associated type `Output` (from trait `TheirShadow`) must be specified
--> src/main.rs:32:33
|
32 | let vec_shapes: Vec<Box<dyn TheirShadow>> = vec![Box::new(l), Box::new(p)];
| ^^^^^^^^^^^ help: specify the associated type: `TheirShadow<Output = Type>`
...
73 | type Output;
| ------------ `Output` defined here
这可以实现吗,或者是否像在另一个问题答案中一样,集合中所有项目的所有方法的签名必须相同,以便您可以互换使用它们?
由于您不知道< code>Output,您实际上不能使用返回< code>Output的函数,因为它们的大小都不同,Rust无法知道返回的是哪一个。解决这个问题最简单的方法是使用枚举:
enum Shadow {
Tuple2(TheirPoint, TheirPoint),
Tuple4(TheirPoint, TheirPoint, TheirPoint, TheirPoint)
}
impl TheirShadow for TheirPoint {
type Output = Shadow;
fn cast_shadow(self) -> Self::Output {
Shadow::Tuple2(some_point, some_other_point)
}
}
// and so on
您甚至可以消除输出
类型,只需在trait中强制返回Shadow
。
问题内容: 我有两个成员相同,我想将一个结构复制到另一个结构,请参见下面的伪代码: 然后,我有结构的,而结构的,有什么办法复制的? 问题答案: 使用转换更改类型。以下代码使用转换将type 的值复制到type 的值: 游乐场的例子 该转换仅在基础类型,除了结构标签相同的工作。
问题内容: 以下代码可以正常工作。在两个不同的结构上操作并打印该结构的字段的两种方法: 在控制台中显示所需的输出: 现在 ,如果我以以下方式更改方法签名,则会出现编译错误。我只是将方法的接收者移动到方法的参数: 我什至无法编译程序: 问 :为什么 当 方法具有相同的名称和Arity 时 ,我可以在接收器中互换结构类型,而不能在参数中互换结构类型? 问题答案: 因为Go不支持在其参数类型上重载用户定
我有一个gradle android项目,有两个模块: 穿 在我的gradle配置中,我有不同的构建类型。默认设置(debug和release,每个都有自定义设置)以及dev和beta构建类型(也有自定义签名、自定义proguard和自定义applicationIdSuffix)。 我现在想做的是使用构建类型测试版(gradle清洁组件测试版)构建应用程序包。这就开始在测试版中构建应用程序,看到它
问题内容: 我需要采取目前的hql: 并将其更改为 我的问题是与distinct关键字有关。它在使用新的Object查询类型的hql查询中属于什么位置。一种想法是使用子选择,让我与众不同。我试过添加,但不起作用。 问题答案: 好的,对感兴趣的人来说,正确的语法是
我正在开发一个需要ML模型集成的Android应用程序。为此,我使用TensorFlow lite进行部署。我使用基于自定义模型的暹罗网络进行输出,输出形状为[1 128]。当我在Google Colab上推断python中的tf lite模型时,输出[1 128]数字与我在Android设备上产生的数字不同。输入图像在两种推断以及输入和输出形状上都是相同的,但我在Android手机和Python
问题内容: 当与MySQL数据库连接时,我有几种方法可以做同样的事情,保存或加载不同类型的参数。目前,我对每种类型都有不同的方法。如何合并这些方法,以便它们支持不同的类型? 下面是两个非常相似但使用不同类型的方法的示例: 请注意,在该示例中,类型均为数字。在类型完全不同的情况下(例如int和String),如何避免使用近乎重复的方法? 问题答案: 您可以在此处应用 策略 模式。 …