Object 新建和实例化之间的Racket差异

Object 新建和实例化之间的Racket差异,object,racket,instantiation,Object,Racket,Instantiation,我偶然发现调用了实例化。以前,在阅读Racket中的GUI文档时,我只看到new用于创建GUI类的对象 使用该页面中的实例化: (instantiate button% ((format "~a" j) child) (stretchable-width #t) (stretchable-height #t) (callback (lambda (button event) (printf "

我偶然发现调用了
实例化
。以前,在阅读Racket中的GUI文档时,我只看到
new
用于创建GUI类的对象

使用该页面中的
实例化

(instantiate button%
        ((format "~a" j) child)
        (stretchable-width #t)
        (stretchable-height #t)
        (callback
         (lambda (button event)
           (printf "~a~n" (send button get-label)))))
在其余部分中使用
new

这两者的区别是什么

编辑 我找到了一个页面,告诉我这两者的区别,但我真的不明白“按名称初始化参数”是什么。这与关键字参数相同吗?

中(定义框架(新框架%[label“Example”])
[label“Example”]
是一个按名称初始化参数,名为
label
的参数被赋予值
“Example”
。它们在概念上类似于关键字参数,但机制不同,并且与关键字参数不同,如果您真的愿意,可以按位置提供它们。以下是相关文件,来自:

可以按名称或位置提供初始化参数。这个 初始化变量的外部名称可用于 实例化或使用超类初始化窗体。那些表格 也接受按位置参数。生成对象过程和 超类初始化过程只接受位置参数

由position提供的参数转换为按名称提供的参数 使用init和init field子句的顺序以及 每个子句中的变量。当实例化表单同时提供 根据位置和名称参数,将放置转换后的参数 在按名称参数之前。(顺序可能很重要;另请参见 创建对象。)


要是我以前知道这种争论就好了!在Python中,就像在Racket中一样,我有时希望使用名称参数,只是我不知道它们被称为什么,它们实际上存在于Racket中。
; Make a frame by instantiating the frame% class
(define frame (new frame% [label "Example"]))