如何消除SBCL中let*声明的_变量未使用的风格警告?
解决SBCL中
_变量未使用的警告问题 方法一:用
progn替代let*(推荐)
如果exp1到expn仅需按顺序执行副作用、不需要用到返回值,直接用progn替代let*即可——完全不产生变量绑定,自然不会触发警告:(defun test () (progn exp1 exp2 ... expn))方法二:在
let*中正确添加ignore声明
若必须保留let*形式(比如依赖绑定的顺序语义),要注意let*里每次绑定的_都是新的局部变量,单独的(declare (ignorable _))无法覆盖所有绑定。只需在let*的代码块开头添加(declare (ignore _)),让声明作用于所有后续的_绑定:(defun test () (let* ((_ (exp1)) (_ (exp2)) ... (_ (expn))) (declare (ignore _))))要是想更明确地针对每个绑定,也可以在每个绑定后单独加声明,宏生成时自动处理即可:
(defun test () (let* ((_ (exp1)) (declare (ignore _)) (_ (exp2)) (declare (ignore _)) ... (_ (expn)) (declare (ignore _)))))方法三:使用
&aux参数(另类思路)
还可以通过函数定义时的&aux参数实现顺序执行,同时添加忽略声明:(defun test (&aux (_ (exp1)) (_ (exp2)) ... (_ (expn))) (declare (ignore _)))
内容的提问来源于stack exchange,提问作者marked-off-topic
相关产品推荐
相关产品推荐

