Rust如何调用"父方法"?在Java中是这样的:

public class parent{
    ...
    public void doSomething(){
        System.out.println("Parent method");
    }
}
public class child extends parent{
    ...
    public void doSomething(){
        super.doSomething();
        System.out.println("Child method.");
    }
}

在Go中,我们可以通过struct中的匿名字段进行模拟:

type parent struct{}

func (self *parent) doSomething() {
    fmt.Println("parent method")
}

type child struct {
    parent
}

func (self *child) doSomething() {
    self.parent.doSomething()
    fmt.Println("child method")
}
func main() {
    var c1 child
    c1.doSomething()
}

如何在Rust中模拟它?谢谢

推荐答案

在引擎盖下不太一样,但有点像

trait DoThings {
    fn do_something(&self); 
}

struct Parent;

impl DoThings for Parent {
    fn do_something(&self) { println("doing something"); }
}

struct Child {
    parent: Parent
}

impl DoThings for Child {
    fn do_something(&self) { 
        self.parent.do_something();
        println("child");
    }
}

fn main() {
    let c = Child { parent: Parent };
    c.do_something();
}

有几项建议可以让部分自动执行(例如,如果我们只想直接调用父方法,即不重写子方法中的方法,那么当前必须显式地调用父方法本身).

Rust相关问答推荐

计算具有相邻调换且没有插入或删除的序列的距离

使用元组执行条件分支的正确方法

MacOS(AARCH64)上Ghidra中的二进制补丁导致进程终止

使用 struct 外部的属性来改变 struct 的原始方式

具有对同一类型的另一个实例的可变引用的

在Rust中,在实现特征`Display`时,如何获取调用方指定的格式?

如何计算迭代器适配器链中过滤的元素的数量

如何使用Actix Web for Rust高效地为大文件服务

如何使用reqwest进行异步请求?

如何设置activx websocket actorless的消息大小限制?

UnsafeCell:它如何通知 rustc Select 退出基于别名的优化?

当推送到 HashMap 中的 Vector 时,类型 `()` 无法取消引用

Rust Redis 中的 HSET 命令问题

是否可以通过可变引用推进可变切片?

如何在 Rust 的 Hyper 异步闭包中从外部范围正确读取字符串值

在构建器模式中捕获 &str 时如何使用生命周期?

判断对象是 PyDatetime 还是 Pydate 的实例?

Rust 中函数的类型同义词

为什么指定生命周期让我返回一个引用?

如何存储返回 Future 的闭包列表并在 Rust 中的线程之间共享它?