Oop 魔法之路
我想通过减少一些参数将所有子结构方法映射到它的父结构 以下是一个例子:- 游乐场:-Oop 魔法之路,oop,rust,Oop,Rust,我想通过减少一些参数将所有子结构方法映射到它的父结构 以下是一个例子:- 游乐场:- 结构世界; 结构同胞; 结构父级{ 酒吧小孩:小孩, 酒吧兄弟姐妹:兄弟姐妹 } 内隐父代{ pub fn new()->Parent{ 母公司{ 兄弟姐妹:兄弟姐妹, 孩子:孩子, } } } 结构儿童; 植入儿童{ 发布fn集合(多个自我、多个世界和多个世界、多个兄弟姐妹和多个兄弟姐妹、多个兄弟姐妹和f32){ // .. } 发布fn集合(多个自我、多个世界、多个同级、多个同级、多个同级){ // ..
结构世界;
结构同胞;
结构父级{
酒吧小孩:小孩,
酒吧兄弟姐妹:兄弟姐妹
}
内隐父代{
pub fn new()->Parent{
母公司{
兄弟姐妹:兄弟姐妹,
孩子:孩子,
}
}
}
结构儿童;
植入儿童{
发布fn集合(多个自我、多个世界和多个世界、多个兄弟姐妹和多个兄弟姐妹、多个兄弟姐妹和f32){
// ..
}
发布fn集合(多个自我、多个世界、多个同级、多个同级、多个同级){
// ..
}
//以世界为第一参数,兄弟为第二参数的32种方法
}
fn main(){
让世界=世界;
让mut parent=parent::new();
parent.child.set_x(&mut-world,&mut-parent.sibling,0.23);
parent.child.set_y(&mut-world,&mut-parent.sibling,0.12);
//期望:-
//parent.set_x(&mut-world,0.23)
//父集合(和多个世界,1.23)
}
父母知道谁是兄弟姐妹,谁是孩子。不需要全球范围的指导。我需要从外部范围隐藏孩子和兄弟姐妹。我试过以下方法
内隐父代{
pub fn set_x(&mut self,world:&mut world,x:f32){
self.child.set_x(世界和多个self.sibling,x);
}
// ...
}
但我有32种方法。这不是一种明确的方法。您可以使用一个简单的宏:
macro_rules! map_methods {
($stype:ty { $($method:ident ($($param:ident : $ptype:ty),*);)* }) => {
impl $stype {
$(
fn $method (&mut self, world: &mut World, $($param: $ptype),*) {
self.child.$method (world, &mut self.sibling, $($param),*)
}
)*
}
}
}
然后您可以这样使用:
map_methods!{ Parent {
set_x (_x: f32);
set_y (_y: f32);
}}
PS:从Rust宏开始时必须阅读: