defvar-maybe

Katsumi Yamaoka yamaoka @ jpl.org
2001年 9月 14日 (金) 20:31:12 JST


>>>>> In [apel-ja : No.00659]
>>>>>	Katsumi Yamaoka <yamaoka @ jpl.org> wrote:

山岡> ;; test.el
山岡> (require 'pym)
山岡> (eval-when-compile
山岡>   (set 'foo 'bar))
山岡> (defvar-maybe foo 'bar)
山岡> (message "%s" foo)

山岡> % mule -batch -q -no-site-file -f batch-byte-compile ./test.el
山岡> % mule -batch -q -no-site-file -l ./test.elc
山岡>  => Symbol's value as variable is void: foo

現在 pym.el で定義されているマクロ defvar-maybe は、byte-compile
時に defvar-maybe 以外の手段で bind された変数が存在する場合は、
nil を返すようになっていますが、無条件に

(macroexpand '(defvar-maybe foo 'bar "doc"))
 => (or (boundp 'foo)
	(defvar foo 'bar "doc"))

となるようにしてはいけない理由は何だったでしょうか?

前記のような事故を防ぐために、ソースでは defvar-maybe を使わずに

(or (boundp 'foo)
    (defvar foo 'bar "doc"))

と書いた方が良いという結論では、defvar-maybe の存在意義がありま
せん。でも、Nemacs から最近の Emacs までを使っていろいろ試してみ
たのですが、どうにもわからないのです。
-- 
Katsumi Yamaoka <yamaoka @ jpl.org>





More information about the APEL-ja mailing list