2015-07-04 38 views
6

Tôi nhận được cảnh báo từ trình biên dịch sbcl, rằng một biến đã được xác định nhưng không được sử dụng. Và trình biên dịch là đúng. Tôi muốn thoát khỏi cảnh báo, nhưng không biết làm thế nào để làm điều đó. Dưới đây là ví dụ:SBCL cảnh báo rằng một biến được xác định nhưng không bao giờ được sử dụng

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

Chức năng do-cmd mong đợi các chức năng của nhân viên triển khai giao diện cụ thể f (ngữ cảnh p).

Trình biên dịch sbcl ném cảnh báo sau đây:

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 

Trả lời

11

Bạn cần phải tuyên bố rằng các tham số là cố ý ignored.

(defun worker-2 (context p) 
    (declare (ignore context)) 
    (print p)) 

(ignore cũng sẽ là dấu hiệu cảnh báo nếu bạn làm sử dụng biến. Để ngăn chặn cảnh báo trong cả hai trường hợp, bạn có thể sử dụng tờ khai ignorable, nhưng điều này chỉ nên được sử dụng trong các macro và các trường hợp như vậy mà nó không phải có thể để xác định xem biến sẽ được sử dụng tại thời điểm khai báo của nó hay không.)

+0

Có. Cảm ơn nhiều. Bạn đã giúp tôi rất nhiều. – Ollimaus

Các vấn đề liên quan