defun
내부 let
어휘 바인딩을 사용하여 클로저를 작성 하여 정적 변수의 효과를 얻고 싶습니다 . 그러나 파일을 바이트 컴파일 할 때 경고 메시지가 나타납니다. 내가 잘못하고 있거나 그렇지 않은 경우이 경고를 억제하는 방법이 있습니까?
MCVE를 만들었습니다.
;; -*- lexical-binding: t -*-
(let ((count 0))
(defun increase-count ()
(interactive)
(setq count (1+ count))
(message "Count is: %d" count))
;; The warning happens here.
(increase-count))
코드는 예상대로 작동합니다.이 함수 increase-count
는 "Count is : n"을 출력합니다. 여기서 n은 호출 될 때마다 증가합니다. 그러나이 파일을 바이트 컴파일 할 때 다음 경고가 나타납니다.
In end of data:
mcve.el:11:1:Warning: the function ‘increase-count’ is not known to be
defined.
increase-count
let-block의 끝에서 호출되기 전에 항상 정의되어야 하는 것 같습니다 . 그렇지 않습니까?
defun
생각하는대로하지 않고 항상 최상위 수준의 정의를 만듭니다. Elisp는 결국 계획이 아닙니다 ...