Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
代码示例racket/gui类_Racket - Fatal编程技术网

代码示例racket/gui类

代码示例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

我来自Java和Python,很难理解面向对象代码在Racket中是如何工作的

  • 给定

    (define food%
     (class object%
        (super-new)
        (init-field name)
        (field (edible? #t))
        (init-field healthy?)
        (init-field tasty?) ) )
    
    定义一个超类水果%的食物%,它总是有健康的?#t的值,以及 哪一个不需要一个人来设置健康的?定义新水果时的字段

  • 在racket/gui中,定义按钮%的超类,称为文本输入按钮%,它有两个新字段,输出(理想情况下为文本字段类型)和文本(理想情况下为字符串),其回调字段的值为一个函数,该函数将文本字段的值附加到输出字段值的当前内容中。实际上,按钮将向指定的文本字段输入字符

  • 我想如果我能看到这两个例子,我的大量困惑就会得到解决。也就是说,我正在寻找“合适的”或教科书上的方法来实现这一点,而不是使用set的一些循环技巧!,除非是这样,否则正确的方法归结起来就是。

    (1)你真的是说
    水果%
    应该是
    食品%
    的超类吗?在我看来,您似乎希望
    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)(发送(发送输出文本字段获取编辑器)插入文本值))))我的意图也是正确的:我指的是子类。你的回答很有帮助:非常感谢!