ついさっき驚いたこと。
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)) ))
flet で同じようなことあったときは cl パッケージなんだから、なんか無理してんだろ。obarray を置き換えてるとかの噂を聞いたことあるし、仕方ないなーとか思ってたもんだけど、let でも同じだったとは。。
軽く調べてみた限りだと、Emacs 22 以降なら前者の my-func で警告が出る。