gpt4 book ai didi

racket - 代码示例 racket racket/gui 类

转载 作者:行者123 更新时间:2023-12-04 02:48:55 31 4
gpt4 key购买 nike

我来自 Java 和 Python,很难理解面向对象代码在 Racket 中的工作方式。

  1. 给定

    (define food%
    (class object%
    (super-new)
    (init-field name)
    (field (edible? #t))
    (init-field healthy?)
    (init-field tasty?) ) )

    定义一个父类(super class) fruit% of food% 总是有健康的? #t 的值,以及哪个不需要设置健康?定义新水果时的字段。

  2. 在 racket/gui 中,定义一个名为 text-input-button% 的 button% 父类(super class),它有两个新字段,output(最好是 text-field% 类型)和 text(最好是字符串),并且其回调字段的值是一个函数,该函数将文本字段的值附加到输出字段值的当前内容。实际上,按钮会将字符输入到指定的文本字段中。

我想如果我能看到这两个例子,我的很多困惑就会得到解决。话虽如此,我正在寻找执行此操作的“正确”或教科书方法,而不是使用 set! 的一些迂回技巧,除非这就是所有正确方法归结为。

最佳答案

(1) 你真的是说 fruit% 应该是 food% 的父类(super class)吗?在我看来,您希望 fruit% 成为一个子类。这里假设它是一个子类:

(define fruit%
(class food%
(super-new [healthy? #t])))

(2) 为此,我认为最好基于 panel% 创建一个新的小部件来存储两个子小部件:

(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% 的子类,你可以,但我认为这样更简洁。

关于racket - 代码示例 racket racket/gui 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18174613/

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