4.4.2 append-to-buffer 函数体

append-to-buffer 函数的体部分以 let 开始。

正如我们之前所见 (see let),let 表达式的目的是在 let 的体内创建并给予一个或多个变量初始值。这意味着这样的变量不会与 let 表达式外部同名的任何变量混淆。

通过以下提纲展示了 append-to-buffer 函数的模板,其中包含 let 表达式:

(defun append-to-buffer (buffer start end)
  "documentation…"
  (interactive …)
  (let ((variable value))
        body…))

let 表达式包含三个元素:

  1. 符号 let
  2. 一个 varlist,包含一个两元素列表,即 (variable value)
  3. let 表达式的体部分。

append-to-buffer 函数中,varlist 的样式如下:

(oldbuf (current-buffer))

let 表达式的这部分中,唯一的变量 oldbuf 被绑定到 (current-buffer) 表达式返回的值。这个变量 oldbuf 用于跟踪你正在操作的缓冲区,并从中复制。

varlist 的元素或元素组被一对括号括起,以便 Lisp 解释器能够区分 varlist 和 let 的体部分。因此,varlist 中的两元素列表被一对括号包围。这一行看起来像这样:

(let ((oldbuf (current-buffer)))
  … )

oldbuf 之前的两个括号可能会让你感到惊讶,如果你没有意识到 oldbuf 之前的第一个括号标记了 varlist 的边界,而第二个括号标记了两元素列表 (oldbuf (current-buffer)) 的开始。