Elisp:使用put / get而不是defvar的任何缺点?

时间:2014-02-20 10:22:39

标签: emacs elisp

我有一个移动到行尾的功能,但是 当已经在行尾时,回到之前调用它的最后一个点。

这需要将最后一个点的值存储在某处。 目前我将这一点存储在例如(defvar last-point 1)中,但我认为 封装会更好(好吧,一致性可能因为它仍然会 在外面可见)使用(put 'my-move-end-of-line 'last-point 1)(get 'my-move-end-of-line 'last-point)

这样做有什么不利之处吗?

3 个答案:

答案 0 :(得分:1)

属性比普通变量慢。它们也少用了 那些可能会阅读你的代码的人不太了解。

如果你想明确你的变量是一个内部变量,那么 是一个惯例,用双短划线来命名它 `我 - 最后点”

还要尝试在函数和变量的名称上加上一些前缀 与Emacs中使用的名称没有冲突。

最后,使用属性的主要问题是它们不是 缓冲局部,但你的变量应该在你的例子中:

(defvar my--last-point ())
(make-variable-buffer-local 'my--last-point)

(defun my-last-point ()
   (interactive)
   (if (and my--last-point (eolp))
       (go to my--last-point and set it to nil))
     (go to the end of line and set my--last-point))

就像那样,你的函数不会使用来自一个缓冲区的点值 另一个。

答案 1 :(得分:1)

此任务的变量更清晰。当您将信息存储到该符号时,应该使用符号属性(比如使用'禁用属性来禁用命令),这不是真的。

答案 2 :(得分:0)

用作变量的符号在其变量槽中只接受一个值,但启用属性列表,您可以在其中存储多个值。

属性列表可用于将多个品质链接到单个符号上。