ついさっき驚いたこと。

load-path に以下のような内容の hoge.el というファイルを置いて

(defvar hoge-variable nil)

(provide 'hoge)

以下を評価してみます。

(defun my-func ()
  (interactive)
  (let ((hoge-variable t))
    (require 'hoge)))

M-x my-func で実行した後でも

hoge-variable
=> Symbol's value as variable is void: hoge-variable

でも、こうやって最初に require してあげると大丈夫

(defun my-func ()
  (interactive)
  (require 'hoge)
  (let ((hoge-variable t))
    ))

hoge-variable
=> nil

flet で同じようなことあったときは cl パッケージなんだから、なんか無理してんだろ。obarray を置き換えてるとかの噂を聞いたことあるし、仕方ないなーとか思ってたもんだけど、let でも同じだったとは。。

軽く調べてみた限りだと、Emacs 22 以降なら前者の my-func で警告が出る。