Next: , Previous: , Up: Variables   [Contents][Index]


11.13 Variable Aliases

シノニムとして2つの変数を作成するのが有用なときがあります。2つの変数は常に同じ値をもち、、どちらか一方を変更すると、もう一方も変更されます。変数の名前を変更 — 古い名前はよく考慮して選択されたものではなかった、あるいは変数の意味が部分的に変更された等の理由で — するとき、互換性のために新しい名前のエイリアス(alias)として古い名前を維持するのが有用なときがあるかもしれません。defvaraliasにより、これを行うことができます。

Function: defvaralias new-alias base-variable &optional docstring

この関数はシンボルbase-variableのエイリアスとして、シンボルnew-aliasを定義します。これはnew-aliasから値を取得すると、base-variableの値がreturnされ、new-aliasの値を変更すると、base-variableの値が変更されることを意味します。エイリアスされた2つの変数名は、常に同じ値と同じバインディングを共有します。

docstring引数が非nilの場合、それはnew-aliasのドキュメント文字列を指定します。それ以外では、エイリアスは(もしあれば)base-variableと同じドキュメント文字列となります。ただし、それはbase-variable自体がエイリアスではない場合で、エイリアスの場合、new-aliasはエイリアスチェーンの最後の変数のドキュメント文字列になります。

この関数はbase-variableをreturnします。

変数のエイリアスは、変数にたいする古い名前を新しい名前に置き換える、便利な方法です。make-obsolete-variableは古い名前を陳腐化(obsolete)していると宣言し。それが将来のある時点で削除されるかもしれないことを宣言します。

Function: make-obsolete-variable obsolete-name current-name when &optional access-type

この関数は、倍とコンパイラーに変数obsolete-nameが陳腐化していると警告させます。current-nameがシンボルの場合、それはこの変数の新たな名前です。その後、obsolete-nameのかわりにcurrent-nameを使用するよう、警告メッセージを伝えます。current-nameが文字列の場合、これはメッセージで、置き換えられる変数はありません。whenは、その変数が最初に陳腐化するのがいつかを示す文字列です(通常はバージョン番号文字列)。

オプションの引数access-typeは、非nilの場合は陳腐化の警告を引き起こすアクセスの種類を指定します。getまたはsetを指定できます。

2つの変数シノニムを作成して、マクロdefine-obsolete-variable-aliasを使用することにより同時に1つが陳腐化していると宣言できます。

Macro: define-obsolete-variable-alias obsolete-name current-name &optional when docstring

このマクロは変数obsolete-nameが陳腐化しているとマークして、それを変数current-nameにたいするエイリアスにします。これは以下と等価です:

(defvaralias obsolete-name current-name docstring)
(make-obsolete-variable obsolete-name current-name when)
Function: indirect-variable variable

この関数は、variableのエイリアスチェーンの最後の変数をreturnします。variableがシンボルでない場合、またはvariableがエイリアスとして定義されていない場合、この関数はvariableをreturnします。

この関数は、シンボルのチェーンがループしているときは、cyclic-variable-indirectionエラーをシグナルします。

(defvaralias 'foo 'bar)
(indirect-variable 'foo)
     ⇒ bar
(indirect-variable 'bar)
     ⇒ bar
(setq bar 2)
bar
     ⇒ 2
foo
     ⇒ 2
(setq foo 0)
bar
     ⇒ 0
foo
     ⇒ 0