変数を参照する通常の方法は、それに名前をつけるシンボルを記述する方法です。シンボルのフォームを参照してください。
実行時にのみ決定される変数を参照したいときがあるかもしれません。そのような場合、プログラム中のテキストで変数名を指定することはできません。そのような値を抽出するためにsymbol-value
を使うことができます。
この関数はsymbolの値セルに格納された値をリターンする。これはその変数の(ダイナミックな)カレント値が格納された場所である。その変数がローカルバインディングをもたなければ単にその変数のグローバル値になる。変数がvoidならvoid-variable
はエラーをシグナルする。
その変数がレキシカルにバインドされていれば、symbol-value
が報告する値は、その変数のレキシカル値と同じである必要はない。レキシカル値はそのシンボルの値セルではなく、レキシカル環境により決定される。変数のバインディングのスコーピングルールを参照のこと。
(setq abracadabra 5) ⇒ 5
(setq foo 9) ⇒ 9
;; ここでシンボルabracadabra
;; は値がテストされるシンボル
(let ((abracadabra 'foo))
(symbol-value 'abracadabra))
⇒ foo
;; ここではabracadabra
の値、 ;; つまりfoo
が値を ;; テストされるシンボル (let ((abracadabra 'foo)) (symbol-value abracadabra)) ⇒ 9
(symbol-value 'abracadabra) ⇒ 5