Previous: Creating Buffer-Local, Up: Buffer-Local Variables [Contents][Index]
バッファーローカルなバインディングをもつ変数のグローバル値も、デフォルト値(default)値と呼ばれます。なぜなら、その変数にたいしてカレントバッファーも選択されたフレームもバインディングをもたない場合には、その値が常に効果をもつからです。
関数default-valueおよびsetq-defaultは、カレントバッファーがバッファーローカルなバインディングをもつかどうかに関わらず、その変数のデフォルト値にアクセスまたは変更します。たとえば、ほとんどのバッファーにたいして、paragraph-startのデフォルトのセッティングを変更するために、setq-defaultを使用できます。そして、この変数にたいするバッファーローカルな値をもつCモードやLispモードにいるときでさえ、これは機能します。
スペシャルフォームdefvarおよびdefconstも、バッファーローカルな値ではなく、(もし変数にセットする場合は)デフォルト値をセットします。
この関数は、symbolのデフォルト値をreturnします。これは、この変数にたいして独自の値をもたないバッファーやフレームから参照される値です。symbolがバッファーローカルでない場合、これはsymbol-value(Accessing Variablesを参照してください)と同じです。
関数default-boundpは、symbolのデフォルト値がvoidでないか報告します。(default-boundp
'foo)がnilをreturnした場合、(default-value 'foo)はエラーになります。
default-boundpはdefault-valueんびたいして、boundpはsymbol-valueにたいする述語です。
このスペシャルフォームは、各symbolに、対応するformを評価した結果を新たなデフォルト値として与えます。これはsymbolを評価しませんが、formは評価します。setq-defaultフォームの値は、最後のformの値です。
カレントバッファーにたいしてsymbolがバッファーローカルでなく、自動的にバッファーローカルにマークされない場合、setq-defaultはsetqと同じ効果をもちます。カレントバッファーにたいしてsymbolがバッファーローカルな場合、これは他のバッファーから参照できる値を変更します(それらのバッファーがバッファーローカルな値をもたない限り)が、それはカレントバッファーから参照される値ではありません。
;; バッファー‘foo’で行う:
(make-local-variable 'buffer-local)
⇒ buffer-local
(setq buffer-local 'value-in-foo)
⇒ value-in-foo
(setq-default buffer-local 'new-default)
⇒ new-default
buffer-local
⇒ value-in-foo
(default-value 'buffer-local)
⇒ new-default
;; (新しい)バッファー‘bar’で行う:
buffer-local
⇒ new-default
(default-value 'buffer-local)
⇒ new-default
(setq buffer-local 'another-default)
⇒ another-default
(default-value 'buffer-local)
⇒ another-default
;; バッファー‘foo’に戻って行う:
buffer-local
⇒ value-in-foo
(default-value 'buffer-local)
⇒ another-default
この関数はsetq-defaultと似ていますが、symbolは通常の引数として評価されます。
(set-default (car '(a b c)) 23)
⇒ 23
(default-value 'a)
⇒ 23