gpt4 book ai didi

common-lisp - SBCL 警告变量已定义但从未使用

转载 作者:行者123 更新时间:2023-12-04 10:17:02 26 4
gpt4 key购买 nike

我收到来自 sbcl 编译器的警告,指出变量已定义但未使用。编译器是对的。我想摆脱警告,但不知道该怎么做。这是一个例子:

(defun worker-1 (context p)
;; check context (make use of context argument)
(if context
(print p)))

(defun worker-2 (context p)
;; don't care about context
;; will throw a warning about unused argument
(print p))

;;
;; calls a given worker with context and p
;; doesn't know which arguments will be used by the
;; implementation of the called worker
(defun do-cmd (workerFn context p)
(funcall workerFn context p))

(defun main ()
(let ((context ()))
(do-cmd #'worker-1 context "A")
(do-cmd #'worker-2 context "A")))

do-cmd-function 需要实现特定接口(interface) f(context p) 的工作函数。

sbcl 编译器抛出以下警告:
in: DEFUN WORKER-2
; (DEFUN WORKER-2 (CONTEXT P) (PRINT P))
;
; caught STYLE-WARNING:
; The variable CONTEXT is defined but never used.
;
; compilation unit finished
; caught 1 STYLE-WARNING condition

最佳答案

您需要声明该参数是故意ignored .

(defun worker-2 (context p)
(declare (ignore context))
(print p))
ignore如果您确实使用该变量,也会发出警告。要在这两种情况下抑制警告,您可以使用声明 ignorable , 但这只能用于宏和其他无法确定变量是否将在声明时使用的情况。

如果您还不熟悉 declare ,注意它不是运算符,而是只能出现在 certain locations ;特别是,它必须位于 defun 中的所有表格之前。正文,尽管它可以在文档字符串的上方或下方。

关于common-lisp - SBCL 警告变量已定义但从未使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com