12.7 变量获取

引用一个变量的最常用方法是使用名称对应的符号,详情查阅 符号表达式。

不过有时,你可能想引用仅在运行时决定的变量。这时,你就不能简单的使用变量名对应的符号来进行引用。你需要使用 symbol-value 函数来获取这个值。

Function: symbol-value symbol 这个函数返回储存在符号 symbol 的 value 部分的值。而这个值是变量当前(动态绑定)的值。如果这个变量没有局部绑定,那么就直接使用它的全局绑定。如果这个变量是无效的,那么则会抛出 void-variable 错误。 如果变量是词法绑定的,那么使用 symbol-value 函数获取的值和该变量语法值可能会不同。后者是由语法环境而不是符号 value 部分决定的。详情查阅 变量作用域章

(setq abracadabra 5)
    => 5
(setq foo 9)
    => 9

;; 这里,符号 abracadabra 被当作 symbol 检索
(let ((abracadabra 'foo))
  (symbol-value 'abracadabra))
    => foo
    
;; 这里,符号 abracadabra 的 value, 也就是 foo
;; 被当作 symbol 检索
(let ((abracadabra 'foo))
  (symbol-value abracadabra))
    => 9

(symbol-value 'abracadabra)
    => 5

最后更新于