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