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ブロックの最後に呼び出される前に、常に定義する必要があるように思えます。そうではありませんか?
defun
考えていることを行わず、常に最上位の定義を作成します。エリスプは結局のところスキームではない