Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Rust中重写毯子特性实现_Rust - Fatal编程技术网

在Rust中重写毯子特性实现

在Rust中重写毯子特性实现,rust,Rust,对于我的游戏规则引擎,我有一个叫做Rule的核心特性,它处理游戏回调。有两种类型的规则s:一种基本规则适用于游戏中的任何实体,另一种创建规则仅适用于生物。我目前的代码结构如下: trait基本规则{ fn on_turn_start(&self,owner:&T){} } #[typetag::serde(tag=“type”)] 发布特征创建规则:BaseRule{ fn关于死亡(&自我,所有者:&生物){} } 这很好,但有点烦人,因为您需要为每个实现同时实现规则和创建规则。我试图全面实现

对于我的游戏规则引擎,我有一个叫做
Rule
的核心特性,它处理游戏回调。有两种类型的
规则
s:一种
基本规则
适用于游戏中的任何实体,另一种
创建规则
仅适用于生物。我目前的代码结构如下:

trait基本规则{
fn on_turn_start(&self,owner:&T){}
}
#[typetag::serde(tag=“type”)]
发布特征创建规则:BaseRule{
fn关于死亡(&自我,所有者:&生物){}
}
这很好,但有点烦人,因为您需要为每个实现同时实现
规则
创建规则
。我试图全面实现
BaseRule

impl R的基本规则{
}
但是,如果我尝试添加
BaseRule
特性的新实现,例如通过

为BaseMeedAmageAttack执行BaseRule{
fn开启\u回合\u开始(&自身,所有者:&生物){
//做事
}
}
因为不可能有两个相同特性的实现。是否有一种方法可以为实现
CreatureRule
但仍允许覆盖函数默认实现的类型提供
BaseRule
的总体默认实现


(如果可能的话,我希望避免在
CreatureRule
上使用泛型类型参数,因为Serde序列化不适用于具有泛型类型的特征。)

我认为您必须为每个属性手动实现它,但它只有一行:

impl BaseRule用于。。。{}

自动实现需要一个宏(这会降低代码的可读性),或者impl专门化(and),这目前需要夜间执行

在稳定锈菌中,基本上不是。你要求的是特性专门化。请参阅和。