向racket中的类添加类型注释

向racket中的类添加类型注释,racket,typed-racket,Racket,Typed Racket,试图完成康威的《球拍中的生活游戏》的一个实现,我正在为所有内容添加类型。我很难弄清楚我到底需要做什么才能从gui库中正确键入类 (: new-timer (Instance Timer%)) (define new-timer (new timer% [interval 400] [notify-callback (lambda () (begin

试图完成康威的《球拍中的生活游戏》的一个实现,我正在为所有内容添加类型。我很难弄清楚我到底需要做什么才能从gui库中正确键入类

(: new-timer (Instance Timer%))
(define new-timer (new timer% [interval 400]
                       [notify-callback (lambda () (begin
                                                     (set-field! grd cv (next-grid (get-field grd cv) ROW COLUMNS))
                                                     (send cv on-paint)))]))
(: new-canvas% Canvas%)
(define new-canvas% (class canvas%
              (super-new)
              (inherit get-dc suspend-flush resume-flush)
              (field [dc : (Instance DC<%>) (get-dc)] [grd : Grid (make-grid ROW COLUMNS)])
              (define/override (on-char char)
            (let ([event (send char get-key-code)])
              (cond

                            [(and (char? event) (char=? event #\space)) (send new-timer stop)])))


                      (define/override (on-paint)
                        (send dc erase)
                        (suspend-flush)
                        (render-grid grd ROW COLUMNS dc)
                        (resume-flush))))

(: cv (Instance Canvas%))
(define cv (new new-canvas% [parent main-frame]))

我认为这是因为画布通常没有grd字段,但每次我尝试给画布类型声明
(:cv(Instance new canvas%))
时,它都说它未绑定。可以找到完整的文件和所有代码。有人有什么想法吗?

新定时器的定义中,您试图获取
cv
grd
字段

尽管
cv
是类
newcanvas%
的实例,但其类型不包括该字段。您需要为
newcanvas%
创建一个新的
Class
类型。按照惯例,它应该是大写的版本,如
newcanvas%

(define-type New-Canvas% (Class ....))

(: new-canvas% New-Canvas%)
(define new-canvas% (class ....))

(: cv (Instance New-Canvas%))
(define cv (new .....))

您使用
Class
定义的
newcanvas%
类型应该指定新字段
grd
,并指定它是
Canvas%

的子类。我仍然遇到一些问题。更新的代码在这里错误是关于类“Class具有初始`可伸缩高度',但不是预期类型”我认为这和#有关:工具没有像我预期的那样工作。谢谢你最初的帮助!试试
#:改为实现/inits
(define-type New-Canvas% (Class ....))

(: new-canvas% New-Canvas%)
(define new-canvas% (class ....))

(: cv (Instance New-Canvas%))
(define cv (new .....))