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"]))