在emacs中评估绑定到键的函数时出现错误的类型错误

Rav*_*avi 2 emacs elisp

我编写了一个函数init-set-key-mappings,它设置.emacs文件中的所有全局键.

(defun init-set-key-mappings ()
 "All the key mappings go here"
  (let ((mappings (list
                '("\C-ca"   'open-fileline))))
    (mapcar (lambda (mapping)
          (let ((key (car mapping))
                (func (cadr mapping)))
            (progn
              (message (format "map key %s to %s" key func))
              (global-set-key key func))))
        mappings)))
Run Code Online (Sandbox Code Playgroud)

它评价很好,但是当我按下Cc a时,Emacs抱怨"错误的类型参数commandp,(引用open-fileline)"

我究竟做错了什么?

编辑:我找到了答案.在打开文件之前删除引用似乎可以解决问题.为什么它是问题的象征?这不是函数如何传递 - 作为符号?

Tyl*_*ler 5

你双重引用了这个功能open-fileline.在表达中

(list '("\C-ca" 'open-fileline)))
Run Code Online (Sandbox Code Playgroud)

第一个引号表示引用了以下列表中的所有内容.然后你添加了第二个引用open-fileline.这意味着列表实际上并不包含符号作为汽车的第二个元素,而是一个带引号的符号.相比:

(symbolp (cadar (list '("string" 'open-fileline))))
Run Code Online (Sandbox Code Playgroud)

(symbolp (cadar (list '("string" open-fileline))))
Run Code Online (Sandbox Code Playgroud)