kill-ring-yank-pointer 变量 ¶kill-ring-yank-pointer 是一个变量,
就像 kill-ring 一样。
它和其他 Lisp 变量一样,通过绑定到目标值来实现指向。
例如,如果删除环的值为:
("some text" "a different piece of text" "yet more text")
而 kill-ring-yank-pointer 指向第二个元素,
那么 kill-ring-yank-pointer 的值为:
("a different piece of text" "yet more text")
正如上一章所述(see 列表的实现方式),
计算机并不会为 kill-ring 和
kill-ring-yank-pointer 分别保存文本副本。
“a different piece of text”和 “yet more text”
并不会被重复存储。相反,两个 Lisp 变量指向同一段文本。
示意图如下:
kill-ring kill-ring-yank-pointer
| |
| ___ ___ | ___ ___ ___ ___
---> | | | --> | | | | | |
|___|___|----> |___|___|--> |___|___|--> nil
| | |
| | |
| | --> "yet more text"
| |
| --> "a different piece of text"
|
--> "some text"
变量 kill-ring 和 kill-ring-yank-pointer
都是指针。但通常描述删除环时,会直接把它当成其构成的列表本身,
即把 kill-ring 当作列表,而非指向列表的指针。
相反,kill-ring-yank-pointer 则明确被描述为指向某个列表。
这两种表述方式初看令人困惑,仔细思考后便会清晰。
删除环一般被视为保存近期被剪切文本的完整数据结构;
而 kill-ring-yank-pointer 的作用是标记 —
也就是指向 — 删除环中即将被插入的起始位置(即 CAR 位置)。