シンボルのプロパティにアクセスするには、以下の関数を使用できます。
この関数は、symbolのプロパティリストにあるpropertyという名前のプロパティの値を返します。そのようなプロパティが存在しない場合は、nilを返します。したがって、nilの値とプロパティが存在しないこととの間に区別はありません。
property という名前は eq
を用いて既存のプロパティ名と比較されるため、任意のオブジェクトが有効なプロパティとなります。
例については put を参照してください。
この関数は、symbolのプロパティリストのプロパティ名propertyの下にvalueを格納し、それまでのプロパティ値を上書きします。put関数はvalueを返します。
(put 'fly 'verb 'transitive)
⇒'transitive
(put 'fly 'noun '(a buzzing little bug))
⇒ (a buzzing little bug)
(get 'fly 'verb)
⇒ transitive
(symbol-plist 'fly)
⇒ (verb transitive noun (a buzzing little bug))
この関数は、symbol のプロパティリストを返します。
この関数は、symbolのプロパティリストをplistに設定します。通常、plistは正しく形式化されたプロパティリストである必要がありますが、これは強制されません。戻り値はplistです。
(setplist 'foo '(a 1 b (2 3) c nil))
⇒ (a 1 b (2 3) c nil)
(symbol-plist 'foo)
⇒ (a 1 b (2 3) c nil)
通常の用途では用いられない特殊なオブアレイ内のシンボルについては、プロパティリストセルを非標準的な方法で使用することが妥当な場合があります。実際、abbrev機構はまさにそのように動作しています(AbbrevsとAbbrev Expansionを参照)。
putをsetplistとplist-putを用いて、次のように定義できます。
(defun put (symbol prop value)
(setplist symbol
(plist-put (symbol-plist symbol) prop value)))
この関数は get と同一ですが、symbol
が関数エイリアスの名前である場合、実際の関数を命名しているシンボルのプロパティリストを参照します。関数の定義 を参照してください。オプション引数 autoload が nil 以外であり、かつ symbol がオートロードされている場合、オートロードによって symbol の property
が設定される可能性があるため、この関数はそれをオートロードしようとします。autoload がシンボル
macro である場合、symbol
がオートロード済みのマクロである場合にのみ、オートロードを試みます。
この関数は、function の property を
value に設定します。function
はシンボルである必要があります。関数のプロパティを設定する際に put
を呼び出すよりもこの関数が推奨されるのは、将来的に古いプロパティを新しいプロパティへ再マッピングする機能を実装できるようになるためです。