我正在使用LTK库在Lisp中构建窗口应用程序。我想要一个可以执行动作并可能隐藏自身的按钮。但是,此代码:
(let* ((left (button 0 0 f "←" #'(lambda ()
(decf start page-length)
(funcall redraw)
(if (>= start page-length)
(ltk:configure left :state :visible))
(ltk:configure left :state :hidden))))))
声称“ left”是一个未定义的变量(其余部分在代码中定义,超出了此问题的范围)。
在最坏的情况下,我避免使用我编写的“按钮”功能,并针对这种特殊情况重新编写代码,但是该情况提出了一个通用的解决方案。Lisp中有什么方法可以在变量定义中的函数中使用变量?
let*
仅具有一个绑定的A与绑定相同let
。在let
执行主体之前,绑定不存在。在执行button
引用期间,left
必须来自较早的闭包或left
在对表达式求值后创建的全局引用。你可以这样做:
(let ((left nil))
(setf left (button 0 0 f "←" #'(lambda ()
(decf start page-length)
(funcall redraw)
(if (>= start page-length)
(ltk:configure left :state :visible)
(ltk:configure left :state :hidden))))))
注意:存在一个错误if
,使得lambda始终会执行(ltk:configure left :state :hidden)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句