[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
let (was: Re: インフォについて)
- To: bep@argv.org
- Subject: let (was: Re: インフォについて)
- From: TAKAHASHI Naoto <ntakahas@m17n.org>
- Date: Fri, 27 Apr 2001 10:00:08 +0900 (JST)
- Delivered-To: mailing list bep@argv.org
- Mailing-List: contact bep-help@argv.org; run by ezmlm
- User-Agent: SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.2 Emacs/21.0.103 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)
> 坂本です。
>> (let ((coding-system-for-write 'sjis))
>> (call-interactively 'write-file)))
> ここなのですが、letはどういう事をしてるのでしょう。
> よくこういうのが出てくるのですが、読めなくて。
Emacs Lisp の info を読んで自分で勉強して下さい。
というのは意地悪なので(笑)、説明します。
let はローカル変数が使える progn だと思って下さい。
(let ((x 1) (y 2) (z 3)) なんたらかんたら)
は、xに1を、yに2を、zに3を割り当てた状態で「なんたらかんたら」を実行し
ます。setq と違うのは、let が終了すると、これらローカル変数の割り当て
は、「なかったこと」にされてしまう点です。write-file-in-sjis の例だと、
この関数を実行している間だけ coding-system-for-write の値が sjis にな
ります。write-file-in-sjis の実行が終わると、coding-system-for-write
は実行以前の値に戻ります。
Meadow の環境だったら基本的なコードが sjis ですから、別に setq でもい
いんですが、Unix 環境では基本が iso-2022-7bit あるいは euc-jp ですから、
このように一時的に値を変え、終わったら元に戻すという操作が必要です。
ま、気持ちとしては「関数の実行が後に副作用を残さないようにしたい」って
とこですかね。「お行儀のいい関数」を書くときはこうします。
--
TAKAHASHI Naoto
ntakahas@...
http://www.m17n.org/ntakahas/