Elisp:读取常量

Elisp: reading a constant

读取常量时:hi, 我收到错误:

test: Wrong type argument: char-or-string-p, :hi

(defun test ()
   :hi "greet"
   (insert :hi)
 )

(test)

这是什么意思?为什么“greet”不是输出?

您的错误信息

insertstrings 或 characters 上运行,但你给它一个 symbol (:hi)。将光标放在 insert 上并点击 C-h f RET(或在任何地方执行 C-h f insert RET),您将获得以下描述缓冲区 *Help*.

中的函数 insert

你的问题

我的 ESP 告诉我你认为代码开头的 :hi "greet" 应该将变量 :hi 绑定到值 "greet" 然后 (insert :hi) 应该调用 insert:hi 的值上应该是 "greet".

事实并非如此。

  1. :hi "greet" 没有任何效果。
  2. :hi 是一个关键字,它总是一个计算为自身的常量,不能被绑定。
  3. 要绑定局部变量,请使用 let,尝试 C-h f let RET.

因此你的代码应该是

(def test()
  "my function to insert a greeting"
  (let ((hi "greet"))
    (insert hi)))

补救措施

我强烈建议您阅读 “Emacs 编程简介” Lisp, 你不会后悔的。 最好的方法是在 Emacs 中:C-h i m intro TAB RET.