Emacs:评估(buffer-file-name)与读取变量buffer-file-name?

时间:2014-03-24 00:56:26

标签: emacs elisp

要获取当前缓冲区的文件名,是以下等效项吗?

(1)(buffer-file-name)

(2)buffer-file-name

是否有理由偏爱另一个?

感谢。

2 个答案:

答案 0 :(得分:6)

通常,当存在具有相同名称的函数和变量时,如果要确保获得最新值,请使用函数而不是变量。在某些情况下,变量值是计算值的缓存,因此您想要的可以取决于您希望花费多少时间与您需要最新值的程度。

但无论如何,这只是一个后退指南。 请务必参阅各自的文档 ,包括Elisp手册。如果您有权访问源代码,请同时参考。在这种情况下,doc不会出现任何一种情况,源代码是C(我没有)。

在这种情况下,doc并未指出使用其中一个的任何理由。

答案 1 :(得分:1)

根据我对来源的理解,它们应该是相同的:

这是变量:

DEFVAR_PER_BUFFER ("buffer-file-name", &BVAR (current_buffer, filename)

这是函数的相关部分:

return BVAR (current_buffer, filename);

它们都返回完全相同的位置,只有变量才这样做 取消引用指针,该功能另外工作 缓冲区以外的缓冲区。我猜这个功能 虽然我不确定,但与变量相比,开销很小 因为我还没有看到解除引用缓冲区本地的代码 变量