[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: automatically filling out WordPress comment fields
- From: Katsumi Yamaoka <yamaoka@xxxxxxx>
- Date: Fri, 05 Jun 2009 15:08:26 +0900
- X-ml-name: emacs-w3m
- X-mail-count: 10907
- References: <871vueoqjc.fsf@xxxxxxxxxxx> <87eiychfgv.fsf@xxxxxxxxxxx> <b4meiycbha7.fsf@xxxxxxx> <87zlh0mnsf.fsf@xxxxxxxxxxxxxxxx> <87tz78tnoz.fsf@xxxxxxxxxxxxxxxxxxxxxxx> <b4mmyd0wepl.fsf@xxxxxxx> <87bppjv9ws.fsf@xxxxxxxxxxxxxxxx> <b4miqjmrlhi.fsf@xxxxxxx> <87bpp3jnx0.fsf@xxxxxxxxxxxxxxxx>
>>>>> In [emacs-w3m : No.10906] 青田さん wrote:
[...]
>> `w3m-form-auto-fill-data' の値
>>
>> (("host1" tree...) ("host2" tree...) ...))
>>
>> の tree の部分が、ホストに関わらず、すべて最後にアクセスしたホス
>> トの値になってしまっているように見えます。
> なるほど…たしかにそうなっていました。 どうも w3m-form-input の部分がおか
> しいようです。ぼくのところでもリストがループしたりしていました。
> `() を (list ...) のように書き直してみたところ、今のところうまく動いてい
> るようです。
> ;; でも、実質変わりないはず…ですよねぇ?
何が起きているのか興味があったので調べてみました。;-)
あの現象は bytecomp すると起きるみたいです。
くだんのソースコードは byte-code になる前に、次のように展開され
るのですが、
;; 前回のもの
(byte-optimize-form '(setq tree `(,host () ())))
=> (setq tree (cons host (quote (nil nil))))
;; 今回のもの
(byte-optimize-form '(setq tree (list host nil nil)))
=> (setq tree (list host nil nil))
曲者は (quote (nil nil)) で、これが loop の中にあると、最初に
Emacs 内部で生成された object が、次回からは使い回しされてしまう
んですね。一方今回のものは、毎回作られるので問題無い、と。
(defun testfn ()
(let ((n 3)
x rest)
(while (> n 0)
(setq x `(,n () ()))
(setcar (cdr x) (* n 10))
(setcar (cddr x) (* n 100))
(push x rest)
(setq n (1- n)))
rest))
=> testfn
(testfn)
=> ((1 10 100) (2 20 200) (3 30 300))
(byte-compile 'testfn)
=> #[nil ...]
(testfn)
=> ((1 10 100) (2 10 100) (3 10 100))
;; 本来の機能を試すのは後で。^^;;
--
山岡