Common lisp 为什么会出现带有词法变量的警告
我正在使用此函数的库:Common lisp 为什么会出现带有词法变量的警告,common-lisp,lexical-scope,Common Lisp,Lexical Scope,我正在使用此函数的库: (defun init-plot (&optional (title "Plot Window") (x-size 250) (y-size 250)) (defsketch window ((width x-size)(height y-size)(title title))) (make-instance 'window )) 基本上是一个三个可选参数函数,它使类成为一个草图,创建一个实例。该功能正常工作,但有
(defun init-plot (&optional (title "Plot Window")
(x-size 250) (y-size 250))
(defsketch window ((width x-size)(height y-size)(title title)))
(make-instance 'window ))
基本上是一个三个可选参数函数,它使类成为一个草图,创建一个实例。该功能正常工作,但有以下警告:
);在INIT-PLOT中:未使用的词汇变量标题
在这种情况下,title选项不起作用,但是这些变量在不同的作用域上,因此我不明白为什么必须更改第一个变量的名称。因为不改变它是行不通的
defscket是一个包装defsclass的宏
(defmacro defsketch (sketch-name bindings &body body)
...
所以我不明白这里发生了什么,我不熟悉素描,但大概
defscretch
应该在顶层,而传递给MAKE-INSTANCE
的参数则相反。这似乎不是如何计划的,或者在Git上的草图教程中也不是这样,也许宏扩展defstact
可以帮助您了解title
是如何使用的?查看教程,我觉得所有的示例都将defstact
作为顶级形式。另外,似乎将窗口大小和标题指定给MAKE-INSTANCE
与示例一起使用:(MAKE-INSTANCE'草图示例:hello-world:title“foo”:宽度800:height 300)
按照惯例,前面有DEF的任何东西都是顶级表单。DEFSKETCH实现本身似乎也违反了这一点。