Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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
Oop 魔法之路_Oop_Rust - Fatal编程技术网

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宏开始时必须阅读: