append-to-buffer 的函数体 ¶append-to-buffer 的函数体以 let 开头。
如前所述(see let),let 表达式的作用是创建一个或多个变量并赋予初始值,这些变量仅在 let 函数体内有效。这意味着该变量不会与 let 表达式外部同名变量冲突。
通过展示包含 let 表达式的 append-to-buffer 概要模板,可以清晰看出 let 在整个函数中的位置:
(defun append-to-buffer (buffer start end)
"documentation..."
(interactive ...)
(let ((variable value))
body...))
let 表达式包含三个部分:
let;
(variable value);
let 表达式的函数体。
在 append-to-buffer 函数中,变量列表如下:
(oldbuf (current-buffer))
在 let 表达式的这一部分中,变量 oldbuf 被绑定到 (current-buffer) 表达式的返回值。变量 oldbuf 用于记录当前工作的源缓冲区。
变量列表的元素被一对括号包裹,以便 Lisp 解释器区分变量列表与 let 函数体。因此,变量列表内的双元素列表又被外层括号包裹。该行代码如下:
(let ((oldbuf (current-buffer))) ... )
如果你没有意识到 oldbuf 前的第一个括号标记变量列表边界、第二个括号标记双元素列表 (oldbuf (current-buffer)) 开头,可能会对这两个连续括号感到意外。