我有一个特点,它是由同一个结构以不同的方式实现的。为了实现这一点,我有不同的结构,它们有不同的实现。对于抽象,我将这些结构称为A-Z:
trait Trait {
fn bar<T: Trait> (&self, z: &Struct3<T>) -> Struct3<T>;
}
struct StructA {
name: String,
color: String,
}
impl Trait for StructA {
fn bar<T: Trait> (&self, z: &Struct3<T>) -> Struct3<T>{
let mut list = Vec::new();
list.push(self.clone());
let y = Struct2::<T> {
name: z.y.name,
list: list,
};
Struct3::<T> {
point: 1,
y: y,
}
}
}
struct StructZ {
name: String,
color: String,
}
impl Trait for StructZ {
fn bar<T: Trait> (&self, z: &Struct3<T>) -> Struct3<T>{
let mut list = Vec::new();
list.push(self.clone());
let y = Struct2::<T> {
name: z.y.name,
list: list,
};
Struct3::<T> {
point: 26,
y: y,
}
}
}
有没有其他方法来实现这一点,以便结构的每个实例都有一个不同的trait实现,或者创建一个新结构是最好的方法?
我不熟悉编译语言。我所做的大部分工作都是使用Python和TypeScript。
一种方法是使你的特征在某种类型上通用(即使这种类型实际上没有在特征内部使用)。
trait Trait<T> { /* ... */ }
这使您能够为同一个结构多次实现它。
impl Trait<bool> for Struct { /* ... */ }
impl Trait<u32> for Struct { /* ... */ }
在这里,bool
和u32
只是成为编译时标志,用于选择要使用的Trait
的实现。
let struct_3a = Trait::<bool>::bar(&my_object, /* ... */);
let struct_3b = Trait::<u32>::bar(&my_object, /* ... */);
我在这里使用了bool
和u32
,但您可以在这里使用自己的类型来让一切更清晰。
我有广泛的基本特征。有些类型只关心其功能的子集,所以我添加了一个子集,要求用户实现更小的功能集。 此代码失败: 出现以下错误: 有趣的是,当我删除上的通用性时,它就起作用了: stackoverflow上的其他一些帖子也提到了类似的问题,但它们通常都有关于外来特征的问题(来自标准库的)。在我的案例中,特质和类型都是本地的,因此就我所知,孤儿规则不应该生效。 基本上,错误提到下游板条箱可能实现tra
我有一个问题: 多个结构实现一个trait 都可以以相同的方式实现trait 我考虑过写这个(简短版本) 游戏场 这无法编译: 这里怎么了?或者有没有其他方法可以通用地实现此,而不必为和分别键入一次? 谢谢你们
问题内容: 假设您正在Rails中实现REST API。在提供集合时,您可能只希望包含一些属性: 但是在提供单个资源时,您要包括所有属性: 我看不到如何使用ActiveModel :: Serializers来做到这一点,因为这些示例都使用了一种模式,即为每个模型定义一个序列化器(使用标准命名约定),并让AMS在执行操作时自动在控制器中使用正确的序列化器: 要么: 问题答案: 为避免将视图关注点混
我正在尝试使用匕首学习依赖注入。 我明白,在您的类中,您不会直接实例化客户机代码所依赖的对象,而是使用@inject声明它,通过模块创建ObjectGraphs,并从ObjectGraph中获取对象: 谢谢你。
页面有多个div元素,点击这些div元素将弹出一个遮罩层,遮罩层内显示所点击的对应的内容,请教大佬们该如何用jQuery实现? 具体如下图: 对应代码: 点击div元素弹出的遮罩层根据所点击的div显示对应的内容,如下图: 因为后期会有多个div元素,请问大佬们能否做成数据串的形式,点击那个就把对应的数据插入到这个遮罩层框架内