[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

let (was: Re: インフォについて)



> 坂本です。

>>   (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/