gpt4 book ai didi

Ruby 基类像在抽象类中一样调用子类

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:52 28 4
gpt4 key购买 nike

在 Java 中,我习惯于编写一个抽象类来完成一些设置工作,然后像这样委托(delegate)给具体类:

public abstract class Base {
public void process() {
// do some setup
//...

// then call the concrete class
doRealProcessing();
}

protected abstract void doRealProcessing();
}

public class Child extends Base {
@Override
protected void doRealProcessing() {
// do the real processing
}
}

我在 Ruby 中很难做到这一点,因为我没有抽象类或方法。我还读到“你不应该需要Ruby 中的抽象类或方法,我应该停止尝试用 Ruby 编写 Java”。

我很想知道在 Ruby 中实现等价的正确方法是什么?

最佳答案

欢迎使用动态类型语言!您可能对定义一些未在任何地方声明的函数感到紧张。别担心。这很容易:

class Base
def process
# ...
real_processing
end

def real_processing # This method is optional!
raise "real_processing not implemented in #{self.class.name}"
end
end

class Child < Base
def real_processing
# ...
end
end

b = Child.new
b.process

编辑:这是您的另一种选择,它避免了需要两个不同的方法名称:

class Base
def process
# ...
end
end

class Child < Base
def process
# ...
super # calls the process method defined above in Base
# ...
end
end

关于Ruby 基类像在抽象类中一样调用子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873873/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com