代码示例racket/gui类
我来自Java和Python,很难理解面向对象代码在Racket中是如何工作的代码示例racket/gui类,racket,Racket,我来自Java和Python,很难理解面向对象代码在Racket中是如何工作的 给定 (define food% (class object% (super-new) (init-field name) (field (edible? #t)) (init-field healthy?) (init-field tasty?) ) ) 定义一个超类水果%的食物%,它总是有健康的?#t的值,以及 哪一个不需要一个人来设置健康的?定义新水果时的字段 在ra
(define food%
(class object%
(super-new)
(init-field name)
(field (edible? #t))
(init-field healthy?)
(init-field tasty?) ) )
定义一个超类水果%的食物%,它总是有健康的?#t的值,以及
哪一个不需要一个人来设置健康的?定义新水果时的字段水果%
应该是食品%
的超类吗?在我看来,您似乎希望fruit%
成为一个子类。这里假设它是一个子类:
(define fruit%
(class food%
(super-new [healthy? #t])))
(2) 为此,我认为最好基于面板%
创建一个新的小部件来存储两个子小部件:
(define text-input-button%
(class horizontal-panel%
(super-new)
(init-field text)
;; callback for the button
(define (callback button event)
(define new-value (string-append (send output get-value) text))
(send output set-value new-value))
(define button (new button% [label "Click me"]
[parent this]
[callback callback]))
(define output (new text-field% [label "Output"]
[parent this]))))
;; testing it out
(define f (new frame% [label "Test"]))
(define tib (new text-input-button% [text "foo"] [parent f]))
(send f show #t)
如果你真的想让它成为button%
的子类,你可以,但我认为这更干净。你对(1)的回答足以为我澄清这个问题。但是对于(2),我认为子类实际上更干净:>(定义文本输入按钮%(类按钮%(初始化字段输出文本字段)(初始化字段文本值)(超级新[标签文本值][回调(λ(be)(发送(发送输出文本字段获取编辑器)插入文本值))))我的意图也是正确的:我指的是子类。你的回答很有帮助:非常感谢!