让我们在没有变量赋值的情况下阻止

时间:2015-01-29 04:23:25

标签: emacs elisp

为什么elisp中的let表单包含没有varlist args的body。示例代码,

(defun keyboard-quit ()
  ...............
  (let (select-active-regions)
    (deactivate-mark))
  .........
)

这段代码是否做同样的事情,

(defun keyboard-quit ()
  .......................
  (select-active-regions)
  (deactivate-mark)
  ...................................
)

此代码段取自simple.el Ctrl + G 键绑定。

1 个答案:

答案 0 :(得分:4)

不,这相当于将变量绑定到nil,即

(let (a)
  (b))

相同
(let ((a nil))
  (b))

您可能实际上已经从代码格式中猜到了:如果您是对的,代码将被格式化为

(let
  (a)
  (b))

而Emacs将(a)缩进(b)

此外,这是documented - 请参阅以下案例(i)

  

特殊表格:让(绑定......)表格......

     

...

     

每个绑定都是(i)一个符号,在这种情况下,该符号在本地绑定到nil ;或(ii)表格(符号价值形式)的清单,在这种情况下,符号在本地与评估价值形式的结果相关联。如果省略value-form,则使用nil

另见 C-h f let RET

  

(让VARLIST BODY ......)

     

...

     

VARLIST的每个元素都是一个符号(绑定为nil)