gpt4 book ai didi

oop - Racket 子类中绑定(bind)的自动继承

转载 作者:行者123 更新时间:2023-12-05 00:27:27 32 4
gpt4 key购买 nike

我有一个包含多个子类的类,这些子类都使用父类的方法和字段。是否有处理此问题的“正确”方法?

到目前为止,我一直在每个子类中使用 (inherit method1 method2 ...)

我徒劳地寻找父类可以强制子类继承绑定(bind)的方法,我知道这可能是不好的风格。

对 Racket 或 OOP 不是很有经验。

最佳答案

即使您不使用inherit,这些方法也会被继承。要从父类(super class)调用方法,可以使用(send this method arg1 ...)。类形式中的形式 (inherit method) 将使该方法在主体中的形式 (method arg1 ...) 中可用。这不仅是一种方便的速记,而且比(发送此方法)更有效率。

我不知道包名继承的形式,但你可以用一个小宏来滚动你自己的。这是一个例子:

(define-syntax (inherit-from-car stx) 
(datum->syntax stx '(inherit wash buy sell)))

(define car% (class object%
(define/public (wash) (display "Washing\n"))
(define/public (buy) (display "Buying\n"))
(define/public (sell) (display "Selling\n"))
(super-new)))

(define audi% (class car% (super-new)
(inherit-from-car)
(define/public (wash-and-sell)
(wash)
(sell))))

(define a-car (new audi%))
(send a-car wash-and-sell)

关于oop - Racket 子类中绑定(bind)的自动继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10563679/

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